jQuery IF语句不起作用

时间:2011-01-18 16:39:18

标签: php javascript ajax if-statement

我正在执行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();
 }

} 

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

您必须将代码置于AJAX请求成功回调中,否则将在AJAX调用完成之前调用它。将其置于成功回调中意味着包含IF语句的代码将仅在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);

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

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

} 

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

});

希望这有帮助。