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' }
},
天才 - 达林的欢呼声,这是固定的, – levelnis 2013-02-17 11:36:36