我正在使用MVC.net框架并使用jQuery ajax调用遇到一个奇怪的问题。
我有一个页面,允许用户输入金额,然后点击“下一步”。当他们点击“下一步”时,我对服务器进行ajax调用,并通过JSON返回一些更新的信息。这都是非常标准的东西。
然而,奇怪的是返回的JSON数据。 'data'变量(在回调中)有时为null,有时它包含来自服务器的实际数据。奇怪的是控制器的动作总是被调用,但返回的数据并不总是进入ajax回调函数。它与超时间隔没有任何关系,因为设置该值对问题没有影响。
当我调试动作代码时,我经常可以触发这个条件,但是当我没有调试时,条件不会经常发生。
有没有人遇到类似的问题,或者有关于解决方法或其他事情的建议?
var postbackUrl = "/Balance/Add?amt=" + $("#Amount").val();
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: postbackUrl,
data: "{}",
dataType: "json",
success: function (data,status,request) {
$("#x_amount").val(data.x_newBalance)
}
});
更新: 为了获得更多洞察力,我将回调切换为使用3变量版本。在所有情况下,状态都是“成功”。有趣的是请求。
请求的状态始终为200,readyState为4.不同之处在于responseBody。正如您所料,当'data'为null时,responseBody为null,当'data'有效时,responseBody就有内容。
我想我需要弄清楚为什么responseBody被剥离了。
答案 0 :(得分:1)
您正在使用JSON作为请求内容类型,并仍在查询字符串中提供参数。为什么不简单地使用:
$.ajax({
type: 'POST',
url: '/Balance/Add',
data: { amt: $('#Amount').val() },
dataType: 'json',
success: function (result) {
$('#x_amount').val(result.x_newBalance);
}
});
另请注意,我已使用result
作为变量,以避免与data
混淆。
答案 1 :(得分:0)
您是否尝试过jquery-ajax“timeout”参数?
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: postbackUrl,
data: "{}",
timeout: 20000,
dataType: "json",
success: function (data) {
$("#x_amount").val(data.x_newBalance)
}
});
答案 2 :(得分:0)
我看到当远程服务器不可用时调用的成功回调传递给$ .ajax,在这种情况下,数据值为null。这似乎不对,也许它与你所看到的有关。
update 我的问题是jQuery 1.4.2中的一个错误,也许你遇到了同样的问题? http://bugs.jquery.com/ticket/6172