Я пытаюсь использовать возврат из jQuery ajax вызов в моей собственной функции, но это продолжает возвращаться неопределенный.
function checkUser2(asdf) {
$.ajax({
type: "POST",
async: false,
url: "check_user.php",
data: { name: asdf },
success: function(data){
return data;
//alert(data);
}
});
}
$("#check").click(function(){
alert(checkUser2("muma"));
});
вызов ajax определенно работает, потому что, когда я некомментирую свое предупреждение, я получаю корректный возврат, и я вижу его в поджигателе. Я делаю что-то глупое?
Вызов AJAX является асинхронным - это означает, что запрос AJAX выполняется вне очереди обычного выполнения программы, а в вашей программе это означает, что checkUser2 ()
не возвращает данные в оповещение.
Вы не можете использовать возвращаемые значения из вызовов $. Ajax ()
таким образом, вместо этого переместите код, который использует возвращаемые данные AJAX, в функцию success ()
- вот что это для.
Вы также можете сохранить "данные" с помощью метода данных jQuery. и свяжите его с глобальным объектом jQuery или локальным селектором jQuery. Например,
success: function(data) {
$.data('result', data);
}
К возвращаемому значению можно получить доступ где угодно, используя
$.data('result')
Вы также можете связать его с локальной переменной (например, $ ('# myid'). Data ()), чтобы оно было локальным для этого объекта, а не в глобальный охват.
Я думаю, вы могли бы сделать это:
function checkUser2(asdf) {
var s = $.ajax({
type: "POST",
async: false,
url: "check_user.php",
data: { name: asdf },
success: function(data){
return data;
//alert(data);
}
}).responseText;
return s;
}
но, как и в 4-м примере страницы документации jquery для функции ajax , говорится, что я думаю, что
Блокирует браузер, пока запросы активны. Лучше заблокировать взаимодействие с пользователем> другими способами, когда необходима синхронизация.
Попробуйте вместо этого:
function checkUser2(asdf) {
var result;
$.ajax({
type: "POST",
async: false,
url: "check_user.php",
data: { name: asdf },
success: function(data){
result = data;
}
});
return result;
}
$("#check").click(function(){
alert(checkUser2("muma"));
});
Возможно, вам придется переместить переменную результата как глобальную переменную javascript. Я это еще не тестировал.