вернуться из JQuery AJAX вызова - PullRequest
5 голосов
/ 16 мая 2010

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

Ответы [ 4 ]

7 голосов
/ 16 мая 2010

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

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

3 голосов
/ 16 мая 2010

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

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-м примере jocery doc page для функции ajax говорит, я думаю, что

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

1 голос
/ 16 мая 2010

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

 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. Я еще не проверял это.

0 голосов
/ 16 мая 2010

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

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

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

$.data('result')

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

...