Как получить результат вызова JQuery AJAX, а затем вызвать другую функцию - PullRequest
3 голосов
/ 08 августа 2010

Обычно я пытаюсь вызвать функцию (функция 1), которая получает результаты от другой функции (функция 2). И эта функция 2 выполняет AJAX-вызов.

Таким образом, код будет выглядеть так:

function f1 () {
    var results = f2();
}

function f2() {
    $.ajax({
        type: 'POST',
        url: '/test.php',
        success: function(msg){
        }
    });
}

Я знаю, что я отображаю предупреждение в функции успеха, я получаю результаты. Но как мы можем вернуть этот результат обратно?

Я попытался сделать что-то подобное внутри функции 2 безуспешно:

возврат сообщения;

спасибо за вашу помощь

Ответы [ 2 ]

4 голосов
/ 08 августа 2010

Теоретически это возможно с помощью настройки async: false в jQuery. Этот параметр делает вызов синхронным, то есть браузер ждет, пока он не будет завершен.

Это считается плохой практикой, потому что это может заморозить браузер. Вы должны реструктурировать свой скрипт, чтобы вы могли делать соответствующие вещи в обратном вызове success вместо f1. Я знаю, что это менее удобно, чем то, что вы делаете в f1(), но это правильный способ справиться с асинхронной природой Ajax.

2 голосов
/ 08 августа 2010

Вы можете принудительно сделать запрос синхронным (что-то вроде потери ajax), но заставить ваш код работать:

function f2() {
    var ret = false;
    $.ajax({
        type: 'POST',
        url: '/test.php',
        async:false,
        success: function(msg){
           ret = msg
        }
    });
    return ret;
}

В противном случае вам нужно добавить функцию обратного вызова в вашу функцию success, если вы хотите сохранить ее асинхронной.

function f2() {
    $.ajax({
        type: 'POST',
        url: '/test.php',
        async:false,
        success: function(msg){
           doSomething(msg);
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...