ответьте из jQuery ajax на звонок

Я пытаюсь использовать возврат из 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 определенно работает, потому что, когда я некомментирую свое предупреждение, я получаю корректный возврат, и я вижу его в поджигателе. Я делаю что-то глупое?

5
задан ROMANIA_engineer 29 April 2016 в 10:25
поделиться

4 ответа

Вызов AJAX является асинхронным - это означает, что запрос AJAX выполняется вне очереди обычного выполнения программы, а в вашей программе это означает, что checkUser2 () не возвращает данные в оповещение.

Вы не можете использовать возвращаемые значения из вызовов $. Ajax () таким образом, вместо этого переместите код, который использует возвращаемые данные AJAX, в функцию success () - вот что это для.

7
ответ дан 13 December 2019 в 19:23
поделиться

Вы также можете сохранить "данные" с помощью метода данных jQuery. и свяжите его с глобальным объектом jQuery или локальным селектором jQuery. Например,

success: function(data) {
  $.data('result', data);
}

К возвращаемому значению можно получить доступ где угодно, используя

$.data('result')

Вы также можете связать его с локальной переменной (например, $ ('# myid'). Data ()), чтобы оно было локальным для этого объекта, а не в глобальный охват.

0
ответ дан 13 December 2019 в 19:23
поделиться

Я думаю, вы могли бы сделать это:

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 , говорится, что я думаю, что

Блокирует браузер, пока запросы активны. Лучше заблокировать взаимодействие с пользователем> другими способами, когда необходима синхронизация.

3
ответ дан 13 December 2019 в 19:23
поделиться

Попробуйте вместо этого:

 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. Я это еще не тестировал.

1
ответ дан 13 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: