Функция JavaScript, которая возвращает данные вызова AJAX
Я хотел бы создать функцию JavaScript, которая возвращает значение вызова jQuery AJAX. Мне хотелось бы что-то вроде этого.
function checkUserIdExists(userid){
return $.ajax({
url: 'theurl',
type: 'GET',
cache: false,
data: {
userid: userid
},
success: function(data){
return data;
}
});
}
Я знаю, что могу сделать это, установив async в false, но я бы предпочел не делать этого.
Ответы
Ответ 1
С помощью jQuery 1.5 вы можете использовать совершенно новую функцию $.Deferred
, которая предназначена именно для этого.
// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax({ url: "example.php" })
.success(function() { alert("success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
// perform other work here ...
// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });
Источник
Ответ 2
Вы не можете вернуть данные, возвращенные вызовом AJAX, если вы не хотите его синхронно называть (а вы не доверяете мне). Но то, что вы можете вернуть, - это обещание данных, возвращаемых вызовом AJAX, и вы можете сделать это на самом деле очень элегантным способом.
( UPDATE:
Обратите внимание, что в настоящее время jQuery Promises несовместим с Promises/A + спецификация - больше информации в этот ответ.)
В принципе вы можете вернуть возвращаемое значение вашего вызова $.ajax(...):
function checkUserIdExists(userid){
return $.ajax({
url: 'theurl',
type: 'GET',
cache: false,
data: {
userid: userid
}
});
}
и тот, кто вызывает вашу функцию, может использовать его следующим образом:
checkUserIdExists(userid).success(function (data) {
// do something with data
});
См. этот пост для лучшего объяснения и демонстраций, если вы заинтересованы.
Ответ 3
вы можете передать функцию обратного вызова:
function checkUserIdExists(userid, callback) {
$.ajax({
...
success: callback
});
}
checkUserIdExists(4, function(data) {
});
Ответ 4
Как и в jQuery 1.8, "успешный", "ошибка" и "полный" обратный вызов устарели. Вместо этого вы должны использовать "done", "fail" и "always".
Итак, вы могли бы:
function checkUserIdExists(userid, callback) {
return $.ajax({
url: 'theurl',
type: 'GET',
cache: false,
data: {
userid: userid
}
})
.done(callback)
.fail(function(jqXHR, textStatus, errorThrown) {
// Handle error
});
}
checkUserIdExists(2, function(data) {
console.log(data); // Do what you want with the data returned
});
Ответ 5
Это не то, как должно было быть сделано асинхронное программирование JavaScript. Вместо этого используйте обратный вызов в своей функции успеха, чтобы вызвать другую функцию для использования ваших данных, возвращенных с сервера.
Ответ 6
Тим, два сценария являются взаимоисключающими; асинхронная операция не будет служить никакой цели и не сможет получить возвращенные данные.
Вы должны посмотреть инфраструктуру с поддержкой событий для ваших вызовов ajax