Хранить данные в переменной из поста jquery - PullRequest
1 голос
/ 14 февраля 2012

У меня есть этот код:

function someFunction(something1, something2) {

    $.post("execute.php", { someData1: something1, someData2: something2 }, function(data) {

        returnData = data;

    });

    return returnData;

}

Функция Post возвращает либо false, либо true, и я хочу, чтобы someFunction отправляла эту информацию дальше по возвращаемому значению, но она не работает.Я предполагаю, что это возвращаемое значение возвращается до того, как оно будет опубликовано, поэтому оно не определено, но я понятия не имею, что с этим делать.

1 Ответ

7 голосов
/ 14 февраля 2012

Ajax-вызов является асинхронным, что означает, что он выполняется «вне пути». Функция выполняется и возвращается немедленно, и javascript продолжает свой веселый путь, в то время как вызов ajax выполняется «вне пути».

Вот почему он возвращает неопределенное значение, потому что это не так.

Чтобы предотвратить такое поведение, вам нужно установить его в «синхронный». И вам нужно определить returnData вне области действия функции.

Вы можете сделать это, установив

$.ajaxSetup({async:false});

А потом вызывать $ .post,

Или вы можете сделать $.ajax(... {async:false}...);

Итак, используя первый метод:

function someFunction(something1, something2) {
    $.ajaxSetup({async:false});  //execute synchronously

    var returnData = null;  //define returnData outside the scope of the callback function

    $.post("execute.php", { someData1: something1, someData2: something2 }, function(data) {

        returnData = data;

    });

    $.ajaxSetup({async:true});  //return to default setting

    return returnData;

}
...