日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

请求接受json tp5_关于jq jsonp跨域请求错误处理bug

發布時間:2025/3/15 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请求接受json tp5_关于jq jsonp跨域请求错误处理bug 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:昨天,同事修改項目升級插件時遇到了一個ajax 報錯,如下:

$.ajax({type : "get",async:false,timeout:3000,url : "http://10.10.10.26:808/servlet/updateLog?line=1",dataType : "jsonp",//數據類型為jsonpjsonp: "jsonpCallback",//服務端用于接收callback調用的function名的參數success : function(data){console.log(data)},error:function(e){alert('fail');console.log(e);},complete:function(r,t){console.log(r);console.log(t)}})

net::ERR_CONNECTION_TIMED_OUT --連接超時

排查原因是:發ajax請求時,該日志服務正在啟動(服務可能沒有起來),有時間差。

但是,有了新的疑問-->為什么沒走error和complete 回調呢?

查資料得知:這是由于這次請求是跨域的jsonp;

JQuery跨域請求的缺陷:錯誤處理
跨域請求可能會失敗,比如對方服務器的安全設置拒絕接受來自我方的請求(我方不在對方的信任列表中),或者網絡不通,或對方服務器已關閉,或者請求地址或參數不正確導致服務器報錯等等。

在JQuery中,當使用ajax或getJSON發送請求后會返回一個jqXHR對象[3]。該對象實現了Promise協議,所以我們可以使用它的done、fail、always等接口來處理回調。例如我們可以用在它的fail回調中進行請求失敗時的錯誤處理:

let xhr = $.getJSON(...); xhr.fail(function(jqXHR, textStatus, ex) {alert('request failed, cause: ' + ex.message); });

這種方式能夠處理“正常的錯誤”,例如超時、請求被中止、JSON解析出錯等等。但它對那些“非正常的錯誤”,例如網絡不通、服務器已關閉等情況的支持并不好。此時不會走任何一個回調(success、error、complete...).

例如當對方服務器無法正常訪問時,在Chrome下你會在控制臺看到一條錯誤信息:

查看代碼知道jsonpo跨域方式 會在head標簽前部插入一個script標簽;所以可用一下方法解決這個問題。

var head = document.head || $('head')[0] || document.documentElement; // code from jquery var script = $(head).find('script')[0]; script.onerror(function(evt) {alert('error');//清除掉這個無效的script 節點if (script.parentNode) {script.parentNode.removeChild(script);}// delete jsonCallback global functionvar src = script.src || '';var idx = src.indexOf('jsonCallback=');if (idx != -1) {var idx2 = src.indexOf('&');if (idx2 == -1) {idx2 = src.length;}var jsonCallback = src.substring(idx + 13, idx2);delete window[jsonCallback];} });

總結

以上是生活随笔為你收集整理的请求接受json tp5_关于jq jsonp跨域请求错误处理bug的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。