如何从Ajax请求中获取回调函数的值

时间:2012-03-08 18:01:19

标签: jquery asynchronous callback

这个问题可能与我在这里提出的问题有关: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


 };

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

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

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