jQuery Jsonp 请求,捕获异常(404,50X)状态异常

JSON 2018-02-13 08:55:38 13185

  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

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
jQuery Jsonp 请求捕获异常404,50X状态异常
Elasticsearch JSONP 请求提示{"error":"JSONP is disabled."}
【Exception】Java 异常处理基本规则,Java异常处理的基本规范
JQuery Ajax四种写法,Ajax请求返回JSON 操作Demo
Shiro 教程,关于最近反应的相关异常问题,解决方法合集。
HttpClient取访问域名的真实ip,HttpClient请求取目标IP地址
Java取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。
JSONP 的工作原理,JSONP Demo讲解
Springboot HTTP请求,Springboot HTTP 请求 Demo。Get/Post
HttpClient 取详细的头信息
最新文章
Golang 常见设计模式之单例模式 5651
两招提升硬盘存储数据的写入效率 4037
【程序员的实用工具推荐】 Mac 效率神器 Alfred 3420
自媒体时代的贤内助——AI 视频云 3294
如何处理大体积 XLSX/CSV/TXT 文件? 2180
AI 视频云 VS 窄带高清,谁是视频时代的宠儿 1982
Golang 常见设计模式——装饰模式详细讲解 3812
Flink 在又拍云日志批处理中的实践 17182
个推异常值检测和实战应用-又拍云 4634
TCP 和 UDP协议详细讲解,优缺点分析讲解 13813
最热文章
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 670531
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 646549
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报 567973
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 530781
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 504933
Elasticsearch教程(四) elasticsearch head 插件安装和使用 473939
免费天气API,天气JSON API,不限次数获取十五天的天气预报 443151
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 239383
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 226130
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 217760
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...