jQuery Jsonp 请求,捕获异常(404,50X)状态异常
Jsonp 是一种特殊的 Ajax 请求, 如果您对 Jsonp 不了解,那么请看这篇:JSONP 的工作原理,JSONP Demo讲解 。或者看看这篇 Jsonp 教学篇:JSONP 教程 ,里面也讲到了什么是跨域。
我今天被国外的一个画板项目迷上了,我觉得 clone
一版本,并且为了快速的让大家稳定的使用,我利用 CDN 做前后端分离。
前后端分离示意图
遇到的问题(Jsonp)404问题
发现 Jsonp 去请求 CDN ,如果用户请求的资源是不存在的,那么?必须要告知用户,而 Jsonp 的原理是创建 script
标签,然后加载返回内容作为 JavaScript 脚本去执行,调用方法,达到获取返回值。
ajax代码:
sojson = function (data) {
console.log("返回值",data)
}
$.ajax({
url:"//file.sojson.com/sketch/11333111111.json",
dataType:"jsonp",
error:function (e) {
d = "error", alert("Uh-oh, an error occured while trying to load this sketch.")
}
});
返回值:
sojson("294x223","297x230","299x235"]);
当返回值作为脚本去执行的时候,调用了上面的 sojson 方法。
但是当资源404
的时候,或者报错的时候,也就是返回不成功的时候, jsonp 是无法得到状态,也不会进 success
,也不会进 error
方法。有人会说 script
的话,有 onerror
方法,但是这个方法有浏览器兼容问题。
最终解决Jsonp,异常捕获
其实有点投机取巧,就是采用 timeout
属性,因为当资源只要没有正确返回,就会计算在 timeout
时间消耗内。
$.ajax({
url:"//file.sojson.com/sketch/11333111111.json",
timeout:4000,//超过4秒没正确返回,就会进入 error
dataType:"jsonp",
error:function (e) {
d = "error", alert("Uh-oh, an error occured while trying to load this sketch.")
}
});
就这样就 OK 了。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/274.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。