GVKun编程网logo

ajax老是执行error回调而不执行success回调(ajax失败回调)

13

此处将为大家介绍关于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老是执行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使用示例

$.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的原因

$.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的解决方法

$.ajax返回的JSON无法执行success的解决方法


为什么会这样子呢?在网上查了好久,结果发现是因为我指定了dataType:'json',这样一指定完蛋了,对Json的要求就非常严格起来了,起初我的json格式是这样写的:"{result:{\"success\":\"true\",\"meg\":\"success\"}}",可这样写不行,得改成这样写:"{\"success\":true,\"mesg\":\"success\"}",如果说是bool类型,则不用加引号,其它的键/值都需要加引号.

(MVC3)Ajax.BeginForm中的OnSuccess不执行的问题研究

(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不执行的问题研究的相关信息,可以在本站进行搜索。

本文标签: