ajax返回data:text/plain,導致ajax回撥success不執行
阿新 • • 發佈:2019-01-05
問題描述:
正常情況下,ajax post返回的資料應該在response中(請求為非同步時),但是卻有第二個,chrome中請求描述如下:
name path | Method | status | Type
data:text/plain, post , Data , Document
可能的原因分析
- 檢查所有請求型別,響應型別,都已是json
- 有資料說jquery1.4之前版本沒問題,之後版本返回json資料必須是嚴格json,例如:
{\"info\":{\"code\":0,\"msg\":\"string msg\" }}
而不是
{"info":{"code":0,"msg":"string msg"}}
解決問題
以上都不是問題所在,卻發現alert(response.msg)是,呼叫了以下程式碼
var alert = window.alert;
window.alert = function (message){
try {
var iframe = document.createElement("IFRAME");
iframe.style.display = "none";
iframe.setAttribute("src" , 'data:text/plain,');
document.documentElement.appendChild(iframe);
var alertFrame = window.frames[0];
var iwindow = alertFrame.window;
if (iwindow == undefined) {
iwindow = alertFrame.contentWindow;
}
iwindow.alert(message);
iframe.parentNode.removeChild(iframe);
}
catch (exc) {
return alert(message);
}
}
這是坑死人不償命啊,想來下,前人改造window.alert物件,可能是為了手機端上去挑彈出框上方不怎麼好看的:“來自xxx.com網頁的訊息”, 直接去掉後問題解決,當然alert回到原始狀態
注意
另外,如果一定要改造alert ,也可以但是要注意,瀏覽是否支援Data:Url 屬性,大部分webkit的瀏覽器是支援的 看場景按需選擇即可
更多Data:Url屬性
data:,<文字資料>
data:text/plain,<文字資料>
data:text/html,<HTML程式碼>
data:text/html;base64,<base64編碼的HTML程式碼>
data:text/css,<CSS程式碼>
data:text/css;base64,<base64編碼的CSS程式碼>
data:text/javascript,<Javascript程式碼>
data:text/javascript;base64,<base64編碼的Javascript程式碼>
data:image/gif;base64,base64編碼的gif圖片資料
data:image/png;base64,base64編碼的png圖片資料
data:image/jpeg;base64,base64編碼的jpeg圖片資料
data:image/x-icon;base64,base64編碼的icon圖片資料