日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请求接受json tp5_关于jq jsonp跨域请求错误处理bug 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:昨天,同事修改項(xiàng)目升級(jí)插件時(shí)遇到了一個(gè)ajax 報(bào)錯(cuò),如下:

$.ajax({type : "get",async:false,timeout:3000,url : "http://10.10.10.26:808/servlet/updateLog?line=1",dataType : "jsonp",//數(shù)據(jù)類型為jsonpjsonp: "jsonpCallback",//服務(wù)端用于接收callback調(diào)用的function名的參數(shù)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 --連接超時(shí)

排查原因是:發(fā)ajax請(qǐng)求時(shí),該日志服務(wù)正在啟動(dòng)(服務(wù)可能沒有起來),有時(shí)間差。

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

查資料得知:這是由于這次請(qǐng)求是跨域的jsonp;

JQuery跨域請(qǐng)求的缺陷:錯(cuò)誤處理
跨域請(qǐng)求可能會(huì)失敗,比如對(duì)方服務(wù)器的安全設(shè)置拒絕接受來自我方的請(qǐng)求(我方不在對(duì)方的信任列表中),或者網(wǎng)絡(luò)不通,或?qū)Ψ椒?wù)器已關(guān)閉,或者請(qǐng)求地址或參數(shù)不正確導(dǎo)致服務(wù)器報(bào)錯(cuò)等等。

在JQuery中,當(dāng)使用ajax或getJSON發(fā)送請(qǐng)求后會(huì)返回一個(gè)jqXHR對(duì)象[3]。該對(duì)象實(shí)現(xiàn)了Promise協(xié)議,所以我們可以使用它的done、fail、always等接口來處理回調(diào)。例如我們可以用在它的fail回調(diào)中進(jìn)行請(qǐng)求失敗時(shí)的錯(cuò)誤處理:

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

這種方式能夠處理“正常的錯(cuò)誤”,例如超時(shí)、請(qǐng)求被中止、JSON解析出錯(cuò)等等。但它對(duì)那些“非正常的錯(cuò)誤”,例如網(wǎng)絡(luò)不通、服務(wù)器已關(guān)閉等情況的支持并不好。此時(shí)不會(huì)走任何一個(gè)回調(diào)(success、error、complete...).

例如當(dāng)對(duì)方服務(wù)器無法正常訪問時(shí),在Chrome下你會(huì)在控制臺(tái)看到一條錯(cuò)誤信息:

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

var head = document.head || $('head')[0] || document.documentElement; // code from jquery var script = $(head).find('script')[0]; script.onerror(function(evt) {alert('error');//清除掉這個(gè)無效的script 節(jié)點(diǎn)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];} });

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。