ajax请求后的Javascript变量状态

时间:2013-11-21 23:00:10

标签: javascript jquery ajax

我是网络编程的新手,我并不完全理解一些简单的事情。 假设我们有以下ajax请求:

var records = [];
   $.ajax(
   {
        url : "index", 
        dataType: 'json',
        success: function (response)
        {
           records = response;
        }                
   });
   alert(records.length);//This displays 0
   alert(records.length);//This alert correctly displays number of records

问题是数组记录显示为空,如果我在调用ajax后尝试立即使用它们(第一个警告显示零长度,而第二个警告显示正确的长度)。有什么问题以及如何解决?

2 个答案:

答案 0 :(得分:3)

您只需将警报置于成功回调中。

   var records = [];
   $.ajax(
   {
        url : "index", 
        dataType: 'json',
        success: function (response)
        {
           records = response;
           alert(records.length);  // will always be correct
        }                
   });

在您的示例中,行为将是不可预测的,并且将取决于调用返回的速度。

答案 1 :(得分:2)

Ajax中的A代表异步

在HTTP响应返回之前,不会触发成功函数。

当第一个alert开火时,它还没有回来。在您单击“确定”到alert所花费的时间内,响应已到达,因此成功函数在第二个alert触发时运行。 (alert是阻止功能)。

在发送HTTP请求后,不要立即对成功函数中的数据进行处理。