【问题标题】:jQuery IF statement not workingjQuery IF 语句不起作用
【发布时间】:2011-01-18 16:39:18
【问题描述】:

我正在执行 ajax 查询以检查 mysql 数据库中的汽车名称,如果找到汽车,它将返回“汽车名称不可用”,否则返回“汽车名称可用”。此文本被放入一个 id 为“checkname”的 div 中。

这一切运行良好,但是当我尝试隐藏添加按钮时,如果汽车名称不可用,它就失败了,我不知道为什么:/

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();
 }

} 

【问题讨论】:

  • 把这个放在成功回调里面:$("#submit").toggle(html == "Car name unavailable");

标签: php javascript ajax if-statement


【解决方案1】:

任何依赖于来自 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()(docs) 来执行此操作。

【讨论】:

    【解决方案2】:

    您必须将代码放入您的 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();
     }
      }
     });
    
    } 
    

    【讨论】:

      【解决方案3】:

      按照 patrick dw 的建议,您可能可以解决问题(很可能 ajax 调用尚未完成(即 div 内容未更新)并且检查返回 false),但由于字符串比较确实可以带来许多错误(例如由于换行符、尾随空格、区分大小写等导致字符串不匹配)我建议您使用另一种比较方法。

      例如,如果找到汽车,您可以使用 .addClass() 添加一个类,然后使用 .hasClass() 检查该 div 是否具有“找到”类

      【讨论】:

      • 谢谢,您将如何实施?我是 jQuery 新手
      【解决方案4】:

      我使用 .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
      });
      
      });
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2017-10-22
        • 2014-09-15
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多