2015-05-29 2 views
0

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

Вот мой Ajax код:

<script type="text/javascript"> 

     pic1 = new Image(16, 16); 
     pic1.src = "assets/img/loader.gif"; 

     $(document).ready(function(){ 

     $("#packageName").change(function() { 

     var pName = $("#packageName").val(); 

     if(pName.length >= 4) 
     { 
     $("#status").html('<img src="assets/img/loader.gif" align="absmiddle">&nbsp;Checking availability...'); 
      $.ajax({ 
      type: "POST", 
      url: "checkPackageAvaibility.php", 
      data: "packageName="+pName, 

      success: function(msg){ 

      $("#status").ajaxComplete(function(event, request, settings){ 
      if(msg == "OK") 
      { 
       $("#packageName").removeClass('object_error'); // if necessary 
       $("#packageName").addClass("object_ok"); 
       $(this).html('&nbsp;<img src="assets/img/tick.gif" align="absmiddle">'); 
      } 
      else 
      { 
       $("#packageName").removeClass('object_ok'); // if necessary 
       $("#packageName").addClass("object_error"); 
       $(this).html(msg); 
      } 

      }); 

     } 

      }); 

     } 
     else 
      { 
      $("#status").html('<font color="red">The username should have at least <strong>4</strong> characters.</font>'); 
      $("#packageName").removeClass('object_ok'); // if necessary 
      $("#packageName").addClass("object_error"); 
      } 

     }); 

     }); 

     //--> 
     </script> 

Вот мой PHP код:

<?php 
    include "include/session.php"; 
    include 'include/dbConnect.php'; 

    global $dbLink; 

    if(isset($_POST["packageName"])){ 

     $pacName = $_POST["packageName"]; 

     $query= ("SELECT * FROM Package WHERE package_name = '$pacName'"); 
     $sql_check = sqlsrv_query($dbLink,$query); 

     $rows = sqlsrv_has_rows($sql_check); 

     if($rows ===true) 
     { 
     echo '<font color="red">The nickname <STRONG>'.$pacName.'</STRONG> is already in use.</font>'; 
     } 
     else 
     { 
     echo 'OK'; 
     } 
    } 

?> 

ответ

2

Вы должны связать ajaxComplete к документу

По состоянию на JQuery 1.8, метод .ajaxComplete() должен быть привязан только к .

Так

$(document).ajaxComplete(function(event, request, settings){ 
}) 

Демо: Fiddle


Вам не нужно ajaxComplete(), вместо того, чтобы просто использовать сделал обратный вызов, как

pic1 = new Image(16, 16); 
pic1.src = "assets/img/loader.gif"; 

$(document).ready(function() { 

    $("#packageName").change(function() { 
     var pName = $("#packageName").val(); 
     if (pName.length >= 4) { 
      $("#status").html('<img src="assets/img/loader.gif" align="absmiddle">&nbsp;Checking availability...'); 
      $.ajax({ 
       type: "POST", 
       url: "checkPackageAvaibility.php", 
       data: "packageName=" + pName 
      }).done(function (msg) { 
       if (msg == "OK") { 
        $("#packageName").removeClass('object_error'); // if necessary 
        $("#packageName").addClass("object_ok"); 
        $('#status').html('&nbsp;<img src="assets/img/tick.gif" align="absmiddle">'); 
       } else { 
        $("#packageName").removeClass('object_ok'); // if necessary 
        $("#packageName").addClass("object_error"); 
        $('#status').html(msg); 
       } 
      }); 
     } else { 
      $("#status").html('<font color="red">The username should have at least <strong>4</strong> characters.</font>'); 
      $("#packageName").removeClass('object_ok'); // if necessary 
      $("#packageName").addClass("object_error"); 
     } 

    }); 

}); 
+0

жаль мой бедный английский, какой документ вы имеете в виду? –

+0

@MarcusTan объект документа –

+0

, тогда мой «#status» должен измениться на что? –

1

Вы Прикрепление ajaxComplete обработчик события внутри f который инициирует, когда ваш запрос ajax завершен.

Помимо того, что вы не можете сделать это, вам не нужно что либо функция success все, что нужно в этом случае:

success: function(msg) { 
    if(msg == "OK") { 
     $("#packageName").removeClass('object_error'); // if necessary 
     $("#packageName").addClass("object_ok"); 
     $("#status").html('&nbsp;<img src="assets/img/tick.gif" align="absmiddle">'); 
    } else { 
     $("#packageName").removeClass('object_ok'); // if necessary 
     $("#packageName").addClass("object_error"); 
     $("#status").html(msg); 
    } 
} 
+0

Я попробовал этот метод раньше, тем не менее мой никогда не удалял какой-либо класс и не застревал на значке загрузки –

+0

@MarcusTan Это правильный способ, если он не работает , вам нужно проверить, что именно содержит 'msg', поэтому добавьте' console.log (msg); 'перед вашим оператором' if' и посмотрите, что вы получаете на консоли. Обратите внимание, что любой вывод в вашем php-скрипте, кроме 'OK', (пробелы, новые строки, предупреждения php) приведет к сбою оператора 'if'. – jeroen

Смежные вопросы