не могу сломать JQuery функцию, когда есть сообщение AJAX - PullRequest
1 голос
/ 24 ноября 2010
var id = $("input#user_id").val();

if (id != "") {
   $.post("function.php?act=check_id", { id: id }, function(data) {     
       if (data == "error") {                    
           return false;
       }
   });
   //some other codes going on here....

Как видите, я пытаюсь разбить функцию на данные, поступающие с поста ajax, но он продолжает работать с другими кодами.я имею в виду return false не нарушает его.

где я не прав?

спасибо

Ответы [ 4 ]

2 голосов
/ 24 ноября 2010

Код ниже должен идти внутри функции $.post(), поскольку она выполняется по возвращении. Код после вызова AJAX выполняется до его возврата.

AJAX = Асинхронный JavaScript и XML

1 голос
/ 24 ноября 2010

Вы делаете асинхронный вызов AJAX. Код, который вы пытаетесь предотвратить с помощью return false;, выполняется задолго до возвращения ответа.

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

1 голос
/ 24 ноября 2010

Это асинхронный вызов, поэтому он не будет работать так, как вы предполагали - проверка и возврат false будут выполняться, когда данные возвращаются с сервера, но остальная часть кода будет работать в любом случае.Вам следует попробовать jQuery.ajax с async = false, если вы хотите дождаться результата, или поместить другой код в функцию, переданную post.

$.post("function.php?act=check_id", { id: id }, function(data) {        
  if (data != "error") {
    // some other code
  }
});
1 голос
/ 24 ноября 2010

Звучит так, как будто вы хотите, чтобы вызовы AJAX были синхронными, что можно сделать, но все же оставить настройку асинхронного по умолчанию, вероятно, лучше, и обработка кода выполняется, когда вызов ajax завершается с помощью методов обратного вызова (т. Е. Завершено, успех, ошибка). обработчики). По сути, если вы сделаете вызов AJAX синхронным, вы не будете знать, сколько времени займет запрос, что блокирует браузер до тех пор, пока запрос не вернется. Это может быть очень нежелательно для больших запросов AJAX.

Некоторая ссылка на вызовы jQuery AJAX

http://api.jquery.com/jQuery.ajax/

Как заставить AJAX работать синхронно для всех вызовов AJAX

$.ajaxSetup({async:false});

Как настроить синхронную работу AJAX для одного вызова AJAX

$.ajax({
  async: false,
  type: 'POST',
  url: url,
  data: data,
  success: success
  dataType: dataType
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...