执行ajax时候,哪些情况会执行error的回调函数
2018-01-12 17:39
302 查看
首先在说ajax之前要说的是关于button标签的属性问题。
button标签的默认type是submit,如果在一个表单中使用了button却没有规定type=‘button’,那么这个button的默认属性是submit.
我首次遇到这个问题是在一个表单中,没有指定action和method,希望给button绑定一个点击事件,通过ajax给表单中添加内容,但是每次点击按钮的时候都会出现页面刷新的情况,后在action中加一个“#”,发现点击按钮后,地址栏的地址多了一个“#”,分析后觉得是因为提交表单的缘故。但是我没有给button设定type=“submit”,在ajax 中加了error的回调函数,但是并没有执行,最终查询资料发现是button的默认属性导致的原因。
在此次调试中还遇到的问题就是ajax会执行error的回调,之前很少遇到error的情况,在网上找半天发现error的作用挺大的,可以帮助我们很好的排查错误的原因。
首先ajax会执行error的可能原因有:
1. dataType错误(dataType用来指定后台返回参数的类型)
类型错误:后台返回的dataType类型和前台写的不一致会跳入error。
格式错误:jquery1.4之后对json的格式要求非常严格,json格式错误也会跳入error.{“test”:1} 注意格式
有时,在不需要返回值的情况下,扔按模板格式,设置了dataType:”json”,参数;这时候,ajax传值正确时,出现200返回成功状态下报错的特殊情况。
如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
“xml”: 返回 XML 文档,可用 jQuery 处理。
“html”: 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
“script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 “cache” 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
“json”: 返回 JSON 数据 。
“jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
“text”: 返回纯文本字符串
async请求同步异步问题
async默认是true(异步请求),如果想一个Ajax执行完后再执行另一个Ajax, 需要把async=false
例如,你用post请求传值到另一个页面后台,但是页面一加载你的ajax就已经执行过了,传值接收是在后台才完成的,这时候就请求不到数据,所以可以考虑把ajax请求改为同步试试。
data不能不写
data为空也一定要传”{}”;不然返回的是xml格式的。并提示parsererror. data:”{}”
parsererror的异常和Header 类型也有关系。及编码header(‘Content-type: text/html; charset=utf8’);
传递的参数
必须是ajax支持的编码格式
URL路径问题
路径不能有中文
一般我们可以通过分析error中的一些参数进行错误原因的判断:
XMLHttpRequest.readyState: 状态码
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了
XMLHttpRequest.status:调用http请求状态
请求状态有很多,具体遇到错误状态代码可以自行百度查询。
XMLHttpRequest.responseText:返回的错误信息
如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是”timeout”, “error”, “notmodified” 和 “parsererror”。
button标签的默认type是submit,如果在一个表单中使用了button却没有规定type=‘button’,那么这个button的默认属性是submit.
我首次遇到这个问题是在一个表单中,没有指定action和method,希望给button绑定一个点击事件,通过ajax给表单中添加内容,但是每次点击按钮的时候都会出现页面刷新的情况,后在action中加一个“#”,发现点击按钮后,地址栏的地址多了一个“#”,分析后觉得是因为提交表单的缘故。但是我没有给button设定type=“submit”,在ajax 中加了error的回调函数,但是并没有执行,最终查询资料发现是button的默认属性导致的原因。
在此次调试中还遇到的问题就是ajax会执行error的回调,之前很少遇到error的情况,在网上找半天发现error的作用挺大的,可以帮助我们很好的排查错误的原因。
$.ajax({ url : "/service/compute.do", data : { data: data }, async: false, dataType:"text", success: function(data){ alert(data); }, error: function(XMLHttpRequest, textStatus, errorThrown){ alert(XMLHttpRequest.readyState + XMLHttpRequest.status + XMLHttpRequest.responseText); } });
首先ajax会执行error的可能原因有:
1. dataType错误(dataType用来指定后台返回参数的类型)
类型错误:后台返回的dataType类型和前台写的不一致会跳入error。
格式错误:jquery1.4之后对json的格式要求非常严格,json格式错误也会跳入error.{“test”:1} 注意格式
有时,在不需要返回值的情况下,扔按模板格式,设置了dataType:”json”,参数;这时候,ajax传值正确时,出现200返回成功状态下报错的特殊情况。
如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
“xml”: 返回 XML 文档,可用 jQuery 处理。
“html”: 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
“script”: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 “cache” 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
“json”: 返回 JSON 数据 。
“jsonp”: JSONP 格式。使用 JSONP 形式调用函数时,如 “myurl?callback=?” jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
“text”: 返回纯文本字符串
async请求同步异步问题
async默认是true(异步请求),如果想一个Ajax执行完后再执行另一个Ajax, 需要把async=false
例如,你用post请求传值到另一个页面后台,但是页面一加载你的ajax就已经执行过了,传值接收是在后台才完成的,这时候就请求不到数据,所以可以考虑把ajax请求改为同步试试。
data不能不写
data为空也一定要传”{}”;不然返回的是xml格式的。并提示parsererror. data:”{}”
parsererror的异常和Header 类型也有关系。及编码header(‘Content-type: text/html; charset=utf8’);
传递的参数
必须是ajax支持的编码格式
URL路径问题
路径不能有中文
一般我们可以通过分析error中的一些参数进行错误原因的判断:
XMLHttpRequest.readyState: 状态码
0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了
XMLHttpRequest.status:调用http请求状态
请求状态有很多,具体遇到错误状态代码可以自行百度查询。
XMLHttpRequest.responseText:返回的错误信息
如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是”timeout”, “error”, “notmodified” 和 “parsererror”。
相关文章推荐
- jQuery下Ajax 执行回调函数的原理success、error、complete
- Ajax方法不执行success回调函数,而执error回调函数
- ajax成功执行回调函数后会自动刷新本页面的情况之一
- ajax访问后台后前台永远执行error的回调函数
- ajax提交数据后Action中的程序未执行完毕,页面却已经显示响应结果error
- Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况
- Struts2和Jquery实现Ajax时回调函数不执行
- jQuery Ajax Post 回调函数不执行问题的解决方法
- ajax请求成功,但没执行success(done),执行了error(fail)
- ajax请求,返回的数据不看不到,回调函数没有执行
- ajax请求时,在url没错的情况下返回error问题
- 关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message.
- ajax在什么情况下会走success和error
- Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。
- 我用jQuery的ajax的时候 ,总是跑到error方法,不解,请解惑!
- ajax不执行success回调而是执行error回调
- ajax提出post请求,请求正常执行,但是返回error错误
- 一个Div导致Ajax中UpdatePanel以外的数据执行操作的时候全部消失2012-03-25 10:05
- 按照顺序执行异步ajax的回调函数
- sqlite数据库,进行批量执行.sql文件的时候,会出现一个:not an error的错误提示