fineuploader json响应不在Firefox中返回

问题描述:

我使用fineuploader将图像上传到ASP.NET 4.5 Web API控制器。控制器正常,图像上传。我从API控制器收到200响应。我在成功上传后显示缩略图,并且在Amazon S3中的位置的文件名应该返回到JSON响应中。当我在Chrome或IE10中尝试使用它时,它工作正常。当我在Firefox中试用时,返回的responseJson是一个空对象,显示为失败。我使用的是jQuery 1.8.2和fineuploader 3.2。我实际上得到undefined显示在屏幕上,因为responseJson.message未定义。以下是js代码:fineuploader json响应不在Firefox中返回

(function ($) { 
    $('#file-uploader').fineUploader({ 
    multiple: false, 
    request: { 
     endpoint: '/api/post-logo', 
     forceMultipart: false 
    }, 
    // other setup options removed for brevity 
    }).on('complete', function (event, id, fileName, responseJson) { 
    if (responseJson.success) { 
     // for now, to illustrate the issue 
     alert(responseJson.savefilename); 
    } else { 
     $('#file-uploader').after("<span class='field-validation-error'>" + responseJson.message + "</span>"); 
    } 
    }); 
})(jQuery); 

返回的响应是application/json。我需要做些什么才能在Firefox中正常工作?

FF和Chrome之间的区别在于要发送的Accept请求标头。只需使用Firebug和Chrome开发人员工具栏,比较2个浏览器之间的结果:

FF:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

铬:

Accept: */* 

因此,大家可以看到FF不发送正确Accept头部和Web API的内容协商机制简单地回落到text/xml(因为这就是客户端所要求的)。

幸运的插件可以让你使用customHeader属性重写请求头,并强制其期望的类型(application/json在您的情况):如初

request: { 
    endpoint: '/api/post-logo', 
    forceMultipart: false, 
    customHeaders: { Accept: 'application/json' } 
}, 
+0

天才 - 达林的欢呼声,这是固定的, – levelnis 2013-02-17 11:36:36