最近做一個文件上傳的功能,還要綁定數據傳輸到后臺,為了不影響前端的體驗,采用ajax發送請求。找了一些資料,網上的用ajaxupload這個插件。
但是無論成功還是失敗都是執行的error的回調函數。后臺我采用springmvc返回的json,在前段debug后發現,原來返回的雖然是json格式,但是它又包裝了一層。
{"retcode":"0"}
沒辦法查了好多資料發現有的大牛也遇到了這個問題,有的還琢磨了好幾天。看了一下github上的源碼是6年前上傳的,發現有一個大牛2016.11.15號對源碼修改了下解決了這個問題。uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
{
// If you add mimetype in your response,
// you have to delete the '
' tag.// The pre tag in Chrome has attribute, so have to use regex to remove
var data = r.responseText;
var rx = new RegExp("
(.*?)","i");var am = rx.exec(data);
//this is the desired data extracted
var data = (am) ? am[1] : ""; //the only submatch or empty
eval( "data = " + data );
}// evaluate scripts within html if ( type == "html" ) jQuery("
估計原作者對代碼估計也沒維護了。我最后還找到了大牛們的另一個解決辦法:在ajaxFileUpload.js中的uploadHttpData方法中修改對json的判斷:
這里只是記錄下防止自己忘記哈