2013-11-21 92 views
-2

我是新的网络编程,我不完全理解一些简单的事情。 假设我们有以下的Ajax请求:Ajax请求后的Javascript变量状态

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

问这个问题应该有一般警告,因为每天至少要问50次! – adeneo

+0

Javascript是非阻塞的! –

+0

在问你这样的问题之前,请多做一点研究。 – putvande

回答

3

你只需要把你的提醒里面的成功回调。

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

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

2

Ajax中的A代表异步

成功函数不触发,直到HTTP响应回来。

当第一个alert发生火灾时,它还没有回来。在您点击确定到alert所需的时间后,响应已到达,因此在第二个alert触发时成功功能已运行。 (alert是一个阻塞函数)。

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