我今天被国外的一个画板项目迷上了,我觉得 clone 一版本,并且为了快速的让大家稳定的使用,我利用 CDN 做前后端分离。
前后端分离示意图
遇到的问题(Jsonp)404问题
发现 Jsonp 去请求 CDN ,如果用户请求的资源是不存在的,那么?必须要告知用户,而 Jsonp 的原理是创建 script 标签,然后加载返回内容作为 JavaScript 脚本去执行,调用方法,达到获取返回值。
ajax代码:sojson = function (data) {
console.log("返回值",data)
}
$.ajax({
url:"//sojson.nimatool.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:"//sojson.nimatool.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 了。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
¥我需要走的更远,点击我 赞助。
如果还有疑问,点击我加群,为你提供最好的解答。