присвоить возвращаемое значение функции некоторой переменной, используя JavaScript - PullRequest
31 голосов
/ 15 октября 2010

У меня есть функция js, после выполнения некоторой бизнес-логики функция javascript должна возвращать некоторый результат в другую переменную. Пример кода ниже

var response="";
function doSomething() {  
    $.ajax({
        url:'action.php',
        type: "POST",
        data: dataString,
        success: function (txtBack) { 
            if(txtBack==1) {
                status=1;
            }
    });
    return status;     
}

Здесь я хочу использовать как

response=doSomething();

Я хочу присвоить возвращаемое значение «status» «var response». Но результат равен «undefined».

Ответы [ 4 ]

54 голосов
/ 15 октября 2010

Или просто ...

var response = (function() {
    var a;
    // calculate a
    return a;
})();  

В этом случае переменная ответа получает возвращаемое значение функции.Функция выполняется немедленно.

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

17 голосов
/ 15 октября 2010

AJAX-запросы асинхронные.Ваша функция doSomething выполняется, выполняется запрос AJAX, но это происходит асинхронно;так что остальная часть doSomething выполняется, и значение status при возврате не определено.

Фактически ваш код работает следующим образом:

function doSomething(someargums) {
     return status;
}

var response = doSomething();

И затем, через некоторое время,ваш запрос AJAX завершается;но уже слишком поздно

Вам нужно изменить свой код и заполнить переменную "response" в обратном вызове "success" вашего AJAX-запроса.Вам придется отложить использование ответа до тех пор, пока не завершится вызов AJAX.

Там, где вы раньше могли иметь

var response = doSomething();

alert(response);

Вы должны сделать:

function doSomething() {  
    $.ajax({
           url:'action.php',
           type: "POST",
           data: dataString,
           success: function (txtBack) { 
            alert(txtBack);
           })
    }); 
};
6 голосов
/ 15 октября 2010

Вы можете просто вернуть значение из функции:

var response = 0;

function doSomething() {
    // some code
    return 10;
}
response = doSomething();
1 голос
/ 20 марта 2017

Единственный способ получить правильное значение в вашем контексте - это запустить $.ajax() функцию синхронно (что на самом деле противоречит основной идее AJAX). Существует специальный атрибут конфигурации async, который вы должны установить на false. В этом случае основная область, которая фактически содержит вызов функции $.ajax(), приостанавливается до выполнения синхронной функции, поэтому return вызывается только после $.ajax().

function doSomething() {
    var status = 0;
    $.ajax({
        url: 'action.php',
        type: 'POST',
        data: dataString,
        async: false,
        success: function (txtBack) {
            if (txtBack == 1)
                status = 1;
        }
    });

    return status;
}

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