Подтвердить что ты не робот

Функция, возвращающая значение из запроса ajax-запроса

Мне нужна функция, которая возвращает значение из запроса ajax. Я хочу остановить выполнение javascript до тех пор, пока функция не получит свое значение, которое возвращается асинхронным запросом ajax. Что-то вроде:

function myFunction() {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax asynchronus request 
    return data; // return data from the ajax request
}
4b9b3361

Ответ 1

Вам необходимо зарегистрировать функцию обратного вызова, например:

function test() {
    myFunction(function(d) {
        //processing the data
        console.log(d);
    });
}

function myFunction(callback) {
    var data;
    $.ajax({
        url: 'url',
        data: 'data to send',
        success: function (resp) {
            data = resp;
            callback(data);
        },
        error: function () {}
    }); // ajax asynchronus request 
    //the following line wouldn't work, since the function returns immediately
    //return data; // return data from the ajax request
}

Ответ 2

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

    function myFunction() {
var data;
$.ajax({
    url: 'url',
    data: 'data to send',
    async: false,
    success: function (resp) {
        data = resp;
        callback.call(data);
    },
    error: function () {}
}); // ajax asynchronus request 
return data; // return data from the ajax request
  }

Ответ 3

вам нужно сделать asyn = False как:

$.ajax({
    async: false,
    // ...
    success: function(jsonData) {
    //Your Logic
    }
});

Ответ 4

$.ajax({
        url: 'url',
        data: 'data to send',
        async: false,
        success: function (resp) {
            data = resp;
        },
        error: function () {}
    }); // ajax synchronus request 

Ответ 5

Используйте async: false для вашего запроса ajax, поскольку Ajax является асинхронным.

Установка async в false означает, что оператор, который вы вызываете, должен завершиться до того, как вызывается следующий оператор в вашей функции. Если вы установите async: true, то этот оператор начнет выполнение, и следующий оператор будет вызван независимо от того, завершен ли оператор async.

Из jQuery docs:

По умолчанию все запросы отправляются асинхронно (т.е. для этого установлено значение true по умолчанию). Если вам нужны синхронные запросы, установите этот параметр для ложь