Возврат JJuery Ajax-функции - PullRequest
2 голосов
/ 25 марта 2011

Я определил файл Availability.php, который возвращает «да» или «нет», ну, у меня есть форма, которая должна проверить доступность формы, прежде чем подписать пользователя, и я делаю это с помощью этой функции ajax, но строка сравнения не работает?

        availability: function(element, value) {
          $.ajax({  
            type: "GET",  
            url: "/tunnel/availability.php",  
            data: "username="+element, 
            dataType: "html", 
            success: function(data){   
              $("#response").html(data);
              var $response = data;
              if ($response == "yes")
                 alert("found");
             }  
          });
        }

Ответы [ 3 ]

0 голосов
/ 25 марта 2011

Почему вы думаете, что это не работает?Если вы ожидаете, что ваша функция проверит и возвратит значение перед отправкой формы, вполне вероятно, что функция availability возвращается до того, как будет выполнена проверка ajax, что позволит вашей форме отправить и аннулировать предупреждение, т. Е.страница уже выгружена и новый запрос обрабатывается.Если вы хотите использовать это для проверки доступности перед отправкой формы, вам необходимо:

  1. Вернуть false из availability (или иначе прекратить отправку формы)
  2. Выполнитеотправка формы из availability функции успеха.
  3. (возможно). Укажите, что вы ожидаете текстовый ответ вместо HTML.

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

submitIfAvailable: function(form, element, value) {
  $.ajax({  
    type: "GET",  
    url: "/tunnel/availability.php",  
    data: "username="+element,
    dataType: 'text',  // I think it should work without this, but...
    success: function(data){   
      if (data == "yes"){
         $form = $(form);
         $.post( $form.attr('action'), $form.serialize(), function(result) {
            // process the result of form submission
         });
      }
     }  
  });
  return false;
}

Я делаю некоторые предположения - при необходимости измените, если это не соответствует использованию функции availability.Главное, что нужно помнить, это то, что функция вернет до того, как вызов AJAX завершится, и вы не можете использовать любое возвращаемое значение из функции, полученной из вызова AJAX.Это верно, по крайней мере, если вы не заставляете вызов AJAX работать синхронно, установив для параметра aSync значение false.

0 голосов
/ 25 марта 2011

Вам необходимо подтвердить, что на самом деле возвращает страница доступности.Отладьте обратный вызов, используя Firebug (или ваш любимый JS-отладчик), чтобы увидеть, какой тип объекта возвращается как data.Вы можете обнаружить, что возвращаемое значение упаковано, например, вам может потребоваться проверить data.value или что-то подобное.

0 голосов
/ 25 марта 2011

Попробуйте это:

availability: function(element, value) {
  $.ajax({  
    type: "GET",  
    url: "/tunnel/availability.php",  
    data: "username="+element, 
    success: function(data){   
      if (data == "yes"){
         alert("found");
      }
     }  
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...