JQuery IF оператор не работает - PullRequest
2 голосов
/ 18 января 2011

Я выполняю ajax-запрос, чтобы проверить имя автомобиля в базе данных mysql, если автомобиль будет найден, он вернет «Имя автомобиля недоступно», в противном случае «Имя автомобиля доступно».Этот текст помещается в div с идентификатором "checkname".

Все это работает нормально, но когда я пытаюсь скрыть кнопку добавления, если имя машины недоступно, это не удается сделать, и я не знаюпочему: /

function check_name(){

 $.ajax({
  type: "POST",
  url: "http://localhost/Framework/library/php_files/check_car_name.php",
  data:  "carName=" + document.getElementById("carName").value,
  success: function(html){
   $("#checkname").html(html);
  }
 });

 var currentHtml = $("#checkname").html();
 var compareString = "Car name unavailable";

 if (currentHtml==compareString) {
  $("#submit").hide();
 } else {
  $("#submit").show();
 }

} 

Ответы [ 4 ]

7 голосов
/ 18 января 2011

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

function check_name() {
    $.ajax({
        type: "POST",
        url: "http://localhost/Framework/library/php_files/check_car_name.php",
        data: "carName=" + document.getElementById("carName").value,
        success: function (html) {
            $("#checkname").html(html);

             // I placed your code here instead.
             // Of course you wouldn't need to set and then get the HTML,
             //    since you could just do a direct comparison.
            var currentHtml = $("#checkname").html();
            var compareString = "Car name unavailable";
            if (currentHtml == compareString) {
                $("#submit").hide();
            } else {
                $("#submit").show();
            }
        }
    });
}

Причина в том, что по умолчанию AJAX-запрос асинхронный , что означает, что код, который приходит после запроса, будет выполняться немедленно вместо ожидания для ответа, чтобы вернуться.

Еще одна возможная проблема при сравнении HTML, о которой следует помнить, это пробелы. Если вы проводите сравнение строк, оно должно быть точно таким же, поэтому, если есть пробелы, вам сначала нужно его обрезать. Для этого можно использовать jQuery.trim() (документы) .

0 голосов
/ 18 января 2011

Я использую .post ().Третий аргумент post () - это возвращенные данные из файла, в котором они были опубликованы.

Я передаю validate.php введенный адрес электронной почты, validate.php проверяет его и, если он действителен, возвращает 1.

$('a.post').click(function() {
$.post('validate.php',{email : $("#email-field").val()}, 

function(data){
if(data==1)     
{  
//do something if the email is valid
} else { 
//do other thing
});

});

Надеюсь, это поможет.

0 голосов
/ 18 января 2011

Вероятно, вы могли бы решить проблему, выполнив то, что предложил Патрик Д.В. (вероятно, вызов ajax еще не завершен (т. Е. Содержимое div не было обновлено) и проверка возвращает false), но сравнение строк действительно может привести кмного ошибок (например, строки не совпадают из-за новых строк, завершающих пробелов, чувствительности к регистру и т. д.). Я бы предложил вам использовать другой метод сравнения.

Например, вы можете добавить класс, используя .addClass (), еслиавтомобиль найден, а затем проверяет, есть ли у этого div "найденный" класс, используя .hasClass ()

0 голосов
/ 18 января 2011

Вы должны поместить код в свой AJAX-запрос об успешном обратном вызове, в противном случае он будет вызван до завершения вызова AJAX. Помещение его в обратный вызов успеха означает, что код, содержащий оператор IF, будет выполняться только после завершения вызова AJAX. Попробуйте:

функция check_name () {

 $.ajax({
  type: "POST",
  url: "http://localhost/Framework/library/php_files/check_car_name.php",
  data:  "carName=" + document.getElementById("carName").value,
  success: function(html){
   $("#checkname").html(html);

var currentHtml = $("#checkname").html();
 var compareString = "Car name unavailable";

 if (currentHtml==compareString) {
  $("#submit").hide();
 } else {
  $("#submit").show();
 }
  }
 });

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...