在firefox中没有返回fineuploader json响应

时间:2013-02-17 11:14:42

标签: jquery json file-upload asp.net-web-api

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

(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中正常运行?

1 个答案:

答案 0 :(得分:3)

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

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' }
},