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;
});
}
Answers
首先你要确定
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的痛苦。
由于你两个地方调用的 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
。当然,目前只是猜测,并没确定是解析错误,所以你可以跟踪调试一下看看。