2013-02-17 106 views
2

我使用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中正常工作?

回答

3

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