此处将为大家介绍关于ajax老是执行error回调而不执行success回调的详细内容,并且为您解答有关ajax失败回调的相关问题,此外,我们还将为您介绍关于$.ajax({})方法中的回调函数bef
此处将为大家介绍关于ajax老是执行error回调而不执行success回调的详细内容,并且为您解答有关ajax失败回调的相关问题,此外,我们还将为您介绍关于$.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例、$.ajax返回不执行success的原因、$.ajax返回的JSON无法执行success的解决方法、(MVC3)Ajax.BeginForm中的OnSuccess不执行的问题研究的有用信息。
本文目录一览:- ajax老是执行error回调而不执行success回调(ajax失败回调)
- $.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例
- $.ajax返回不执行success的原因
- $.ajax返回的JSON无法执行success的解决方法
- (MVC3)Ajax.BeginForm中的OnSuccess不执行的问题研究
ajax老是执行error回调而不执行success回调(ajax失败回调)
最近公司的一个老项目整改,jquery版本统一为
<script language="javascript" src="${pageContext.request.contextpath}/common/js/jquery-1.9.1.min.js"></script>
结果出现标题的现象,经过网络搜索,找到以下文章,作为标记
最近在看jQuery的api文档,在使用到jQuery的ajax时,如果指定了dataType为json,老是不执行success回调,而是执行了error回调函数,极度郁闷。后面改为1.2.6版本可以执行。
然后继续下载了几个jquery版本,如1.3.2,1.4.0的,指定dataType为json都不能执行success回调,只有小于1.3版本的才能执行success回调。
最后去jquery的网站找到了在线的api文档看了下,地址:http://api.jquery.com/jQuery.ajax/ ,发现dataType如下的说明
“json”: Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
原来是jquery1.4版本以后对json格式要求非常严格了,要满足json.org网站定义的格式才能执行success回调,否则都会出错,无法解析返回的json数据。说的是1.4+以上的,那为什么下载的1.3.2指定dataType为json时也不能执行success回调呢?
怪不得不执行,原来我返回的是{success:true,id:1} 这种不规则的字符串,不是严格的json格式,改成{“success”:true,”id”:”1”} 就可以正常执行success回调了。
JSON格式总结下,详细的去json.org 查看。
1)键名称:用双引号 括起
2)字符串:用使用双引号 括起
3)数字,布尔类型不需要 使用双引号 括起
原文地址:http://www.jb51.net/article/32540.htm
$.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例
在与后台交互的时候,经常使用到jquery的$.ajax()方法来请求数据。回调函数用的比较多的是success,但是beforeSend、complete、error函数也是很有用的。
下面是使用例子小结:
$.ajax({
url: "pro/test.php",
type: "post",
timeout: 5000,
async: true,
cache: true,
data: $(''#jsForm'').serialize(),
dataType: "json",
contentType: "application/x-www-form-urlencoded",
beforeSend: function(XMLHttpRequest){
console.log(this);
$("#inp").val("正在获取数据...");
},
success: function(data){
console.log(data);
$(".display").html("获取到的数据:</br>");
$(".display").append("总条数:"+data.data.all_count);
$("#inp").val("点击获取数据");
},
complete: function(XMLHttpRequest,textStatus){
if(textStatus==''timeout''){
var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");
xmlhttp.abort();
$(".box").html("网络超时!");
}
$("#inp").val("点击获取数据");
},
error: function(XMLHttpRequest, textStatus){
console.log(XMLHttpRequest); //XMLHttpRequest.responseText XMLHttpRequest.status XMLHttpRequest.readyState
console.log(textStatus);
$(".box").html("服务器错误!");
}
});
至此。转载请注明出处。
$.ajax返回不执行success的原因
参考地址:
http://www.codeweblog.com/jquery-ajax%E8%AF%B7%E6%B1%82%E6%88%90%E5%8A%9F-%E8%BF%94%E5%9B%9E%E4%BA%86%E6%95%B0%E6%8D%AE-%E4%BD%86%E6%98%AF%E4%B8%8D%E8%BF%9Bsuccess%E7%9A%84%E9%97%AE%E9%A2%98/
http://www.oschina.net/question/1271184_242753
1. 返回的数据类型一定要符合定义的数据类型。即如果你定义的 dataType 是 json 类型的,那么返回来的数据一定是 json 才可以,平且不然就会执行 error 里的程序块儿。
(1) 同时需要特别的注意返回的JSON数据是否是严格的JSON格式.
(2) 也应该严重关切当后台返回的是一个List 数据(List当中的数据是Json格式)时,有没脏数据即不是严格的JSON格式。
很隐蔽的可能是数据某一个字段中在开始或末尾含有特殊字符,以”回车键”、”Tab键”等
这类隐蔽错误的规避措施就是好的编程习惯:
a. 对于在页面填写入库的数据最好强制性的做,去空操作<利用客户端最好>。
b. 特殊的业务需注意特殊字符。
这样还不够,因为在开发过程中测试或开发人员自己在数据库中手动添加数据,可能会多加了空格等,导致程序调试,测试带来了麻烦。 这时就需要考虑在后台代码对获取的数据做处理。
2. 原因是ajax请求跨域了,解决方法是在两个文件里都添加一段 js: [/b]document.domain
,或者采用Jsonp的方式,如我的前一篇blog中提到的。
总结: 客户端发起请求,得到服务器端的相应是200,<正确拿到服务器响应的数据>没有问题.此时在判断进入success 对应的回调函数还是进入到error对应的回调函数之前,可能会校验一些东西:
1).返回的每条数据是否是dataType中定义的数据类型。如果有部分数据不是或者哪怕一条数据没有严格的按照dataType定义的类型,程序就会进入到error:function(){**}
如果你使用的事 jquery 的 ajax 那么预期服务端返回的类型可以是 http://www.w3school.com.cn/jquery/ajax_ajax.asp这个的 dataType,
如果是单纯的 ajax,那么http://www.runoob.com/ajax/ajax-xmlhttprequest-response.html返回类型responseText,responseXML
2).请求的域和当前域是否是同一域,如果不是同一域也十分有可能进入error:function(){*} ”
$.ajax返回的JSON无法执行success的解决方法
为什么会这样子呢?在网上查了好久,结果发现是因为我指定了dataType:'json',这样一指定完蛋了,对Json的要求就非常严格起来了,起初我的json格式是这样写的:"{result:{\"success\":\"true\",\"meg\":\"success\"}}",可这样写不行,得改成这样写:"{\"success\":true,\"mesg\":\"success\"}",如果说是bool类型,则不用加引号,其它的键/值都需要加引号.
(MVC3)Ajax.BeginForm中的OnSuccess不执行的问题研究
这个问题在网上搜了好久,各路大侠给出的方案基本能解决大部分人的问题,如下:
1.要添加以下js文件<script src="@Url.Content("~/Scripts/jQuery.unobtrusive-ajax.js")" type="text/JavaScript"></script>
2.在web.config中appSettings节点下要有<add key="UnobtrusiveJavaScriptEnabled" value="true" />
但是我的代码中还是怎么都不执行OnSuccess指定的函数。
后来还是偶然发现....是JQuery版本的问题......
之前我引用的是1.10.2的JQuery JS主文件,后来改成1.8.3就好了,至于从哪个版本开始不能用的,有兴趣的朋友可以研究一下。
我们今天的关于ajax老是执行error回调而不执行success回调和ajax失败回调的分享就到这里,谢谢您的阅读,如果想了解更多关于$.ajax({})方法中的回调函数beforeSend,success,complete,error使用示例、$.ajax返回不执行success的原因、$.ajax返回的JSON无法执行success的解决方法、(MVC3)Ajax.BeginForm中的OnSuccess不执行的问题研究的相关信息,可以在本站进行搜索。
本文标签: