2012-03-08 228 views
1

此问题可能与我在此处询问的问题有关:Jquery ajax request with async:true does not return value如何从Ajax请求中获取回调函数的值

现在,我正面临着另一个问题。我如何从回调函数中检索值?

function find_bus_route(array_bustops,callback){ 

      $.ajax({ 

      type: 'POST', 
       async: true, 
      url: 'find_routenum.php', 

      data:{ 

       array_bustops:JSON.stringify(array_bustops) 

      }, 
      dataType:'json', //html,xml 

      success: function(my_results){ 

       callback(my_results); 

      }, 

      error:function(x,e){ 
       if(x.status==0){ 
       alert('You are offline!!\n Please Check Your Network.'); 
       }else if(x.status==404){ 
       alert('Requested URL not found.'); 
       } 
      } 


     }); 

    }//end function 

var arr_one; 

    find_bus_route(arr_bus,function (data){ 
                       arr_one=data; 
      alert(arr_one) //has correct value   

    } 

alert (arr_one) //-->This returns undefined.. 

arr_one似乎超出了范围。

if(arr_one == arr_two){ 
    //do something. 

} 

其实我想要做的是这样的:假设 没有回调和异步设置为false和功能find_bus_route返回一个值。

var arr_one=find_bus_route(arr_stop1); 
var arr_two=find_bus_route(arr_stop2); 

if(arr_one==arr_two){ 
//do something 

} 
else { 
//do something 


}; 

回答

1

由于您异步调用外部页面,因此您没有立即得到结果(取决于服务器/网络负载)。

在您的代码中,第二个警报(显示undefined)在AJAX调用之后执行(可能无法获得响应)。另一个在获取JSON响应时执行。您只能在success回调中使用返回值。

我想你应该向我们解释你到底想要做什么。

编辑: 我认为你需要什么是所谓延迟对象,看到this。 使用jQuery.when()您可以等待两个异步调用。第一个例子正是你所要求的。在回调,你比较两个结果。

+0

我编辑了我的问题+代码 – 2012-03-08 18:19:46

+0

我的答案现在编辑:) – 2012-03-08 21:06:52

2

ajax中的第一个“A”用于异步。当你的“如果”发生火灾时,ajax还没有完成。您需要将其移动到您的成功回调中

相关问题