Функция, возвращающая значение из запроса 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
}
Ответы
Ответ 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 по умолчанию). Если вам нужны синхронные запросы, установите этот параметр для ложь