在使用ajaxfileupload上傳文件的時候,文件上傳成功了,但是返回的json數據一直解析不了。一直提示:Resource interpreted as Document but transferred with MIME type application/json,從字面上理解返回的是文檔不能轉換為json。但是從服務器那邊返回的response里data-type確實是applicaiton/json。困擾很久,查看ajaxfileupload源代碼發現,其實ajaxfileupload其實使用iframe+form的方式實現異步上傳文件的,如下:
//////////////////////////////////////////////////////////////////
//穿件form表單函數
createUploadForm: function (id, fileElementId, data) {
//create form
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
//上傳調用接口
ajaxFileUpload: function (s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = s.fileElementId;
var form = jQuery.createUploadForm(id, s.fileElementId, s.data); //創建form表單
var io = jQuery.createUploadIframe(id, s.secureuri);//創建Iframe
////////////////////////////////////////////////////////
知道了上傳流程,明白了問題出現在哪里了,是用Iframe的時候,返回的時候會添加上html和body標簽。jquery不能直接解析的話,只能自己解析了。
ajaxfileupload調用的時候dataType不用設置,使用默認text/html.返回的數據作處理:
var str = $(data).find("body").text();//獲取返回的字符串
var json = $.parseJSON(str);//把字符串轉化為json對象