jquery jsonp请求错误处理
jQuery将ajax方法进行了封装,jsonp可以轻松实现跨域请求。
$.ajax({type: 'GET', url: "<%= SysUtils::TASK_CENTER_URL %>/all_tasks_h/verbose",
async: false,
dataType: "jsonp",
jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
timeout: 10,
jsonpCallback:"flightHandler",
success: function (msg) {
if(msg){
$('#main-content').text(JSON.stringify(msg));
}else{
$("#main-content").text("未返回数据,请勿频繁刷新"); } },
error: function(jqXHR,textStatus){
var error_info = $('<div class="alert alert-danger">连接失败,请勿频繁刷新,如需帮助请联系管理员</div>');
$("#main-content").empty().append(error_info); }
});
上面的方法正常的情况下可以执行,但是虽然浏览器终端报出错误(404或其他网络错误),但你的error回调却没有被执行!?如果出错的情况下,error回调确没有执行。
我们仔细看看ajax方法的文档,在它error回调说明的最后有一句话:
Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.
这就说明在调用跨域的脚本及jsonp请求时,这个错误将不会被执行,并强调指出这个error是一个 Ajax Event.
其实,严格而讲jsonp不是ajax,ajax是通过XMLHttpRequest对象发送异步请求,而jsonp则是利用js标签天生具备的跨域能力来实现跨域资源访问。也就是说,虽然它的名字叫JSONP(JSON with Padding),但它底层是通过js标签实现的,它跟json以及普通异步请求关系都不大,jquery之所以把jsonp请求放到ajax方法里面,只是为了让api更方便调用而已。 (JSONP的详细描述可以查看WIKI,或者google)
那怎么做才能使JSONP的error回调被执行呢?
有两个方法,方法一:添加timeout参数。
$.ajax({
url: '<%= SysUtils::TASK_CENTER_URL%>/all_tasks_h/verbose',
type: 'GET',
dataType: 'jsonp', // dataType为jsonp
timeout: 5000, // 添加timeout参数
success: function(data) { $('.result').text(JSON.stringify(data)); },
error: function(jqXHR, textStatus) {
// 此时textStatus为‘timeout’
$('#main-content').text('error'); alert('JSONP error!');
}
});
添加timeout参数后,虽然JSONP请求本身的错误没有被捕获,但是最终会因为超时而执行error回调。
那还有没有方法使error回调在JSONP错误发生时就执行呢?
方法二出场:使用jquery jsonp插件 - https://github.com/jaubourg/jquery-jsonp
以下为常见的jqeury jsonp插件调用代码:
$.jsonp({
url: '<%= SysUtils::TASK_CENTER_URL%>/all_tasks_h/verbose',
callbackParameter: "callback",
timeout: 5000,
error: function(xOptions, textStatus) {
// 错误发生时,立即执行
$('.result').text('error');
alert('JSONP error!');
},
success: function(data) {
$('#main-content').text(JSON.stringify(data));
}
});
使用jsonp插件,能够在错误发生时立即执行error回调,并且还附带如’数据过滤’等功能,更多详细介绍请查看它的主页。
以上。
jquery jsonp请求错误处理的更多相关文章
- jQuery ajax请求错误返回status 0和错误error的问题
上周发现一个jQuery ajax请求错误返回status 0和错误error的问题,responseText是"error",状态码是0而不是200: $.ajax({ type ...
- 深入源码分析使用jQuery连续发起jsonp请求失败的原因
jQuery的 jsonp 大家应该是十分熟悉了.曾遇到过这样的需求1.希望请求几个相似的内容添加到页面2.请求的内容一定时间内是固定不变的,希望做个缓存. 于是脑子一拍写下了类似这样的代码 for( ...
- 原生js,jquery ajax请求以及jsonp的调用
ajax 是用来处理前后端交互的技术,可以改善用户体验,其本质是 XMLHttpRequest,异步访问服务器并发送请求数据,服务器返回响应的数据,以页面无刷新的效果改变页面中的局部内容 ...
- 跨域Ajax请求(jQuery JSONP MVC)
通过jQuery的$.ajax方法发送JSONP请求 js代码 <script type="text/javascript"> function jsonptest2( ...
- jquery ajax 请求参数详细说明 及 实例
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- jsonp 请求
$.ajax()方法详解 $.ajax() 方法详解:来源 http://www.cnblogs.com/tylerdonet/p/3520862.html jsonp 调用 无法进入 success ...
- ajax--->请求异常 jQuery提示parsererror错误解决办法
ajax请求异常 jQuery提示parsererror错误解决办法 原因:出现这个错误是因为后端返回的数据类型和前端请求中dataType的要求类型不一致导致的. dataType简介:jquery ...
- jQuery异步请求(如getJSON)跨域解决方案
相信大家在使用jQuery异步请求非自己网站内相对资源(通过别人站点上的URL直接读取)使经常会遇到如下错误吧,实际上这些错误都是浏览器安全机制“搞的鬼”,才让我们开发路上遇到了拦路虎. 当你直接在浏 ...
- JavaScript跨域请求和jsonp请求实例
<script type="text/javascript" src="./whenReady.js"></script> <sc ...
随机推荐
- linux查杀病毒的几个思路
1. tmp 目录下面 2. 定时任务查找一下 crontab -e 3. 病毒要下载 ps -ef|egrep "curl|wget" 查看是否有下载的命令 4. top 一 ...
- jquery Fancybox使用教程
Fancybox是一款基于jquery的对图片展示播放的插件,当然,它html文本.flash动画.iframe以及ajax也予以支持.还可以通过css自定义外观,阴影效果超级赞! 演示效果:http ...
- 完成blog后台一枚
技术实现:纯jfinal+AmazeUI
- Tensorflow之合并tensor
https://www.tensorflow.org/versions/r0.12/api_docs/python/array_ops.html#concat 例子: t1 = [[1, 2, 3], ...
- ubuntu卸载vmware player
sudo vmware-installer -u vmware-player 转自: http://zhidao.baidu.com/link?url=lapkBNBGIUz_mo6603CQgi_2 ...
- C#获取CPU编号
//System.Management;//需要添加引用(系统自带) /// <summary> /// 获取cpu编号 /// </summary> /// <retu ...
- Sql server不同数据类型间拼接(+)
)+'m' 输出 4m 若 +'m' 输出:在将 varchar 值 'm' 转换成数据类型 int 时失败.
- XML转换成数组方法
<?php function xmlToArray2($xml) { // 将XML转为array $array_data = json_decode(json_encode(simplexml ...
- 【Google Earth】pro之视频录制
一.谷歌地球文件简介 谷歌地球能识别的文件分为:gpx.kml.kmz文件.谷歌地球的官方文件为kml和kmz,其中kmz是kml和图片.模型等数据的压缩文件,kml为数据信息文件,也可以分为航迹和字 ...
- Kotlin——高级篇(五):集合之常用操作符汇总
在上一篇文章Kotlin--高级篇(四):集合(Array.List.Set.Map)基础中讲解到了数组Array<T>.集合(List.Set.Map)的定义与初始化.但是由于篇幅的原因 ...