请求接受json tp5_关于jq jsonp跨域请求错误处理bug
前言:昨天,同事修改项目升级插件时遇到了一个ajax 报错,如下:
$.ajax({type : "get",async:false,timeout:3000,url : "http://10.10.10.26:808/servlet/updateLog?line=1",dataType : "jsonp",//数据类型为jsonpjsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数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 --连接超时
排查原因是:发ajax请求时,该日志服务正在启动(服务可能没有起来),有时间差。
但是,有了新的疑问-->为什么没走error和complete 回调呢?
查资料得知:这是由于这次请求是跨域的jsonp;
JQuery跨域请求的缺陷:错误处理
跨域请求可能会失败,比如对方服务器的安全设置拒绝接受来自我方的请求(我方不在对方的信任列表中),或者网络不通,或对方服务器已关闭,或者请求地址或参数不正确导致服务器报错等等。
在JQuery中,当使用ajax或getJSON发送请求后会返回一个jqXHR对象[3]。该对象实现了Promise协议,所以我们可以使用它的done、fail、always等接口来处理回调。例如我们可以用在它的fail回调中进行请求失败时的错误处理:
let xhr = $.getJSON(...);
xhr.fail(function(jqXHR, textStatus, ex) {alert('request failed, cause: ' + ex.message);
});
这种方式能够处理“正常的错误”,例如超时、请求被中止、JSON解析出错等等。但它对那些“非正常的错误”,例如网络不通、服务器已关闭等情况的支持并不好。此时不会走任何一个回调(success、error、complete...).
例如当对方服务器无法正常访问时,在Chrome下你会在控制台看到一条错误信息:
查看代码知道jsonpo跨域方式 会在head标签前部插入一个script标签;所以可用一下方法解决这个问题。
var head = document.head || $('head')[0] || document.documentElement; // code from jquery
var script = $(head).find('script')[0];
script.onerror(function(evt) {alert('error');//清除掉这个无效的script 节点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];}
});
请求接受json tp5_关于jq jsonp跨域请求错误处理bug相关推荐
- 原生JS实现Ajax和JSONP跨域请求
背景: 对接身份证录入和门锁卡号录入设备中,安装驱动完成后,提供的接口服务是http://localhost:8099/?cmd=readbcardid&charset=gbk,返回的数据格式 ...
- 实现百度下拉菜单实例(利用jsonp跨域请求百度数据接口)
JSONP:是JSON with padding(填充式JSON或参数式JSON)的简写,它由两部分组成:回调函数和数据.回调函数是当响应到来时应该在页面中调用的函数,回调函数的名字一般是在请求中指 ...
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
原文 http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 "Uncaught SyntaxError ...
- Jsonp 跨域请求实例
Jsonp 跨域请求实例 关于jsonp的一个实例,其实自己也不是很了解,今天下午稍微研究了一下: 简单来说,jsonp就是为了两个不同网站之间数据传递而产生的,主要用于js脚本,因为浏览器本身是禁止 ...
- jsonp跨域请求响应结果处理函数(python)
接口测试跨域请求接口用的jsonp,需要将回调函数里的json字符串提取出来. jsonp跨域请求的响应结果格式: callback_functionname(json字符串). #coding:ut ...
- 轻松搞定JSONP跨域请求
轻松搞定JSONP跨域请求 一.同源策略 要理解跨域,先要了解一下"同源策略".所谓同源是指,域名,协议,端口相同.所谓"同源策略",简单的说就是基于安全考虑, ...
- 【漏洞利用】JSONP跨域请求漏洞 挖掘、利用详解
参考文章 轻松搞定JSONP跨域请求 jsonp跨域原理,使用以及同源策略 跨域漏洞丨JSONP和CORS跨域资源共享 Tag: Ref: [[019.同源策略]] 本片文章仅供学习使用,切勿触犯法律 ...
- .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器...
1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.We ...
- JS的jsonp是什么?5分钟学会jsonp跨域请求
一.jsonp是什么? jsonp是解决跨域请求的一种技术.浏览器为了防止CSRF攻击会采用同源策略(协议/主机/端口均相同)限制,对非同源发起http请求(即跨域请求)会被浏览器阻止. 二.json ...
最新文章
- Linux下给PHP安装redis扩展
- Qt控制中控考勤SDK
- 信息系统项目管理师案例考试汇总(2005~2021年)
- oracle顺序读发散读,Oracle 拼音排序
- JS 转换数字为大写
- 数据结构-树的基础代码
- WPF入门教程系列(一) 创建你的第一个WPF项目
- java中10个用户注册_JavaWeb(十)Session
- JSON与MAP之间的转换
- mysql--创建表,插入数据,修改表名,删除表,简单查询/内连接、左/右连接
- 从源码入手,一文带你读懂Spring AOP面向切面编程
- matlab 阶乘函数代码
- c语言编程输出一到十,c语言编程输出1?
- 如何成为一个AI产品经理?
- (ECCV-2020)步态横向网络-GLN
- CentOs下安装pip3
- java split竖线_java对竖线|进行分割(split)操作
- WPS Excel表格怎么启用宏功能?
- 误差卡尔曼中的四元数运动学-第二章
- thrust示例ex4: Sinc方法数据重采样加密
热门文章
- 适合程序员的画图工具
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
- 怎么从mysql注册表删除用户_mysql 创建和删除用户
- ecshop根目录调用_ECSHOP各文件夹功能说明
- 输出有样式的php,PHP导出带样式的Excel
- 不显示_电脑不显示桌面图标怎么办?
- linux 1号硬盘不能用,linux 挂载硬盘的疑问 : IDE1 上的接口无法使用.
- linux 喂狗时间,狗狗正确喂食时间表,喂狗最佳时间指南
- mybatis更新时间字段_你以为把Mybatis型处理器了解了,就不会“暴雷”了!
- php查找以xx结尾的的字符串单词,Javascript中查找不以XX字符结尾的单词示例代码_javascript技巧...