2011-11-04 79 views
0

看我的代码:全局变量无法获取ajax成功函数内的值

我正在使用Jamal框架。

Event: { 
     getEvents: function(){ 
      var events; 

      $.ajax({ 
       type: "POST", 
       url: anchor("Events/getEvents"), 
       success: function(data) { 
        if(data){ 
         events = data; 
         console.log(events); 
        } 
       } 
      }); 

      console.log(events); 
      return events; 
     } 
    } 

第一输出是:

{"0":{"id":"1","title":"title","description":"comment"},"1":{"id":"2","title":"title2","description":"comment2"}} 

第二输出: 未定义

如果VAR的事件是全球,为什么不能我设置了AJAX功能内的价值和获得的价值后?

贾马尔打破了什么?

+0

你确定第二个电话有效吗?如果你没有通过你的成功函数,'事件'永远不会被分配。 – AlG

回答

5

这是因为变量:

var events; 

在回调函数初始化 - AJAX调用是异步的,如果你把:

console.log(events); 

右Ajax调用变量没有被分配(它会somtime - 但你不知道什么时候) - 所有的逻辑都需要回调。

你也可以通过设置:async : false使ajax调用同步,那么你的代码应该按预期工作。

0

这是因为您传递给ajax()的函数是异步的。因此执行到达调用成功函数前的console.log()的底部调用。当服务器响应您的AJAX请求时,会调用成功函数。