Ajax调试问题


success无法调用问题

首先是我写的Ajax请求的函数
写的是对的,数据成功发送,也返回了我要的数据
但是在success中断了n个点都停不下来


 function UpdateBookCount(bid, count) {
     $.ajax({
         //===请求地址===
         url: "ashx/UpdataBookCount.ashx",
         //===请求设置===
         data: { bid: bid, count: count },//传输数据,可以是字符串,也可以是json
         success: function (data) {//请求成功时的回调函数,success(data, textStatus, jqXHR)
             switch (data.statecode) {
                 //statecode
                 //1-----成功
                 //2-----异常
                 //3-----用户未登入
                 case 1:
                     console.log("ok");
                     break;
                 case 2:
                     alert("后端异常");
                     break;
                 case 3:
                     location.href = "/FontPage/UserLogin.ashx";
                     break;

                 default:
             }
         },
         type: "post",//请求方法
         dataType: "json",//返回的数据类型
         cache: false,//是否使用缓存,(默认: true,dataType为script和jsonp时默认为false)  
         contentType: "application/x-www-form-urlencoded"//发送信息至服务器时内容编码类型,这里是默认值
     })
 }

这是调用Ajax请求函数的一个地方


 $(".imgJia").click(function () {
     var count = $(this).siblings(".txtCount").val();
     count++;
     $(this).siblings(".txtCount").val(count);
     //计算下总价
     CountTotalMoney();
     //数据库更新
     var bid = $(this).siblings(".bid").val();
     UpdateBookCount(bid, count);
 });

我再另一个页面也写过几乎一摸一样的Ajax函数(url,data不同),但是它却能断点成功.对了还有这个页面的Ajax函数是写在一个按钮点击事件中的,不知道是不是这个原因

这是另一个页面的Ajax


 function BtnBuyClickEvenBind() {
    $("#btnBuyBook").click(function () {
        $.ajax({
            //===请求地址===
            url: "ashx/BuyBook.ashx",
            //===请求设置===
            data: { id: "<%=BookModel.Bid%>",price:"<%=BookModel.PriceNew%>",lastUrl:location.href },
            success: function (data) {//请求成功时的回调函数,success(data, textStatus, jqXHR)
                switch (data.stateCode) {

                    //1-----添加成功
                    //2-----用户未登入
                    //3-----未知错误
                    case 1:
                        alert("ok");
                        break;
                    case 2:
                        location.href="/FontPage/UserLogin.aspx";
                        break;
                    case 3:
                        alert("未知错误");
                        break;
                }
            },
            type: "post",//请求方法
            dataType: "json",//返回的数据类型
            cache: false,//是否使用缓存,(默认: true,dataType为script和jsonp时默认为false)  
            contentType: "application/x-www-form-urlencoded"//发送信息至服务器时内容编码类型,这里是默认值
        });
        return false;
    });
}

jquery Ajax JavaScript

我爱奶纹樽 9 years, 2 months ago

imgjia是按钮吗,按钮有没设置type="button"?

百合魔神晓美焰 answered 9 years, 2 months ago

首先你要确定 updateBookCount 能够进入,然后看开发者工具的Network标签页是否真的发送了AJAX请求。

然后如果 success 没进入很可能是发送错误了,比如服务器返回了 4xx 5xx 状态码。这在Network标签页可以看到。另外在 $.ajax 里除了 success 字段,也设置一个 error 字段,用来监听发生错误时的情况。

2015-9-4 23:20 更新

我看到你设置了 dataType: "json" ,却没添加 error 。即使服务器返回了200但 JSON.parse 抛出了异常,也会进入 error 处理函数。最好填一个 error ,即使不给用户看也把它log出来,能减轻DEBUG的痛苦。

garlink answered 9 years, 2 months ago

由于你两个地方调用的 URL 不同,所以不能保存是返回的同一个数据,就可能存在一个成功另一个失败的情况。失败的情况下你是不可能在进入 success 的。

但是你说数据是返回出来了的,那就说明,在调用 URL 这一段没有错。但是有可能出现另个一错误,就是在解析 JSON 的时候。因为你的 dataType: "json" ,所以得到数据之后还有一个 $.parseJSON 解析过程。这个过程中要求传入的 JSON 必须是标准的 JSON,而不是 javascript 对象。关于 JSON 的标准可以参考 http://json.org/

为了捕捉错误,你需要加入 error 事件。


 $.ajax({
    url: "xxx",
    // ......
    success: function(json) {
        // .....
    },
    error: function(jqXhr, textStatus, error) {
        // ......
    }
});

error 中,如果是解析错误, textStatus 的值应该是 parsererror 。当然,目前只是猜测,并没确定是解析错误,所以你可以跟踪调试一下看看。

Mouse酱 answered 9 years, 2 months ago

Your Answer