Как получить значение функции обратного вызова из запроса Ajax - PullRequest
1 голос
/ 08 марта 2012

Этот вопрос, возможно, связан с вопросом, который я задал здесь: Ajax-запрос Jquery с async: true не возвращает значение .

Теперь я столкнулся с другой проблемой.Как получить значение из функции обратного вызова?

 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 ]

2 голосов
/ 08 марта 2012

Первое «A» в ajax для асинхронного.Аякс не завершился, когда сработало ваше «если».Вы должны переместить его в ваш обратный вызов успеха

1 голос
/ 08 марта 2012

Поскольку вы вызываете внешнюю страницу асинхронно, вы не сразу получаете результат (в зависимости от нагрузки на сервер / сеть).

В вашем коде второе предупреждение (отображающее undefined) выполняется простопосле вызова AJAX (ответ может быть не получен).Другой выполняется при получении ответа JSON.Вы можете использовать возвращаемое значение только в success обратном вызове.

Я думаю, вы должны объяснить нам, что именно вы пытаетесь сделать.

РЕДАКТИРОВАТЬ: Я думаю, что выпотребность называется отложенный объект , см. this jQuery.when() вы можете ждать двух асинхронных вызовов.Первый пример - именно то, что вы просите.В обратном вызове при вы сравниваете два результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...