ajax返回data:text/plain,導致ajax回調success不執行

問題描述:

正常情況下,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圖片數據 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章