jquery.ajax调用间歇性地获取空数据和其他时间的实际数据

时间:2010-11-10 20:15:08

标签: jquery asp.net-mvc ajax

我正在使用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被剥离了。

3 个答案:

答案 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