这个问题可能与我在这里提出的问题有关:Jquery ajax request with async:true does not return value。
现在,我正面临另一个问题。如何从回调函数中检索值?
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.
}
实际上我正在尝试做的是: 假设没有回调,async设置为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
};
答案 0 :(得分:2)
ajax中的第一个“A”用于异步。当你的“如果”开火时,ajax还没有完成。您需要将其移至成功回调
答案 1 :(得分:1)
由于您异步调用外部页面,因此您没有立即获得结果(取决于服务器/网络负载)。
在您的代码中,第二个警报(显示undefined
)在AJAX调用之后执行(可能无法获得响应)。获取JSON响应时执行另一个。您只能在success
回调中使用返回值。
我认为你应该向我们解释你到底想要做什么。
编辑:
我认为您需要的是延迟对象,请参阅this。
使用jQuery.when()
,您可以等待两次异步调用。第一个例子正是你所要求的。在 when 回调中,您将比较两个结果。