0

所以我在这里得到的是非常简单的:

$("form").submit(function() {
    var loc = $("input#location").val();
    var response = $.ajax({
        url: "checklocation.php",
        data: {loc: loc},
        async: false,
        type: "POST",
        success: function(msg) {
            if (msg['status'] == "OK") {
                return true;
            } else {
                return false;
            }
        }
    });
    return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
});

checklocation.php 返回一个 json 字符串。两个返回都没有命中,但是如果我在其中一个中抛出一个 alert() ,则条件确实有效。但是,如果我在 Firebug 中逐步执行此操作,似乎成功函数中的内容从未执行过。

这只是每次都返回 true,无论如何(提交表单)。

编辑:
即使在简化之后:

$("form").submit(function() {
    var loc = $("input#location").val();
    var response = $.ajax({
        url: "checklocation.php",
        data: {loc: loc},
        type: "POST",
        success: function(msg) {
            if (msg == '1') {
                return false;
            } else {
                return true;
            }
        }
    });
});

尽管响应的 statusText 为“成功”,但它仍会跳过成功函数。

4

2 回答 2

1

我不知道您为什么要使用async:false,据我猜测可能的解决方法是,

$("form").submit(function() {
    var loc = $("input#location").val();
    var response = $.ajax({
        url: "checklocation.php",
        data: {loc: loc},
        type: "POST",
        success: function(msg) {
            if (msg['status'] == "OK") {
                return true;
            } else {
                return false;
            }
        },
        complete: function(){
            return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);
        },
    });        
});

问题可能是由于

return !(response['responseText'].indexOf("ZERO_RESULTS") != -1);

可能在执行成功回调之前执行,实际上此时response['responseText']未定义。但是你会得到响应,因为 ajax 请求已经发送。

于 2012-08-03T05:41:38.050 回答
0

就像 thujeevan 指出的那样,最后一行是在 ajax 有时间完成之前执行的,因此当函数检查它并返回时,响应变量正在生成过程中。

实现此功能的最佳方法是将提交按钮替换为普通按钮,并在单击该按钮时运行此检查。然后,您将另一个代码放入表单的提交操作中,该操作仅在检查完成且没问题时才提交。

像这样的东西:

<form method="post" id="theform">
<input type="text" id="location" />
<input type="button" id="button_submit" value="Submit" />
</form>

<script>
 var ok = false;

 $('#button_submit').click(function () {
  var loc = $('input#location').val();
  $.ajax({
   url: 'checklocation.php',
   data: {loc: loc},
   type: 'POST',
   success: function(msg) {
    ok = (msg['status'] == "OK");
   },
   error: function () {
    ok = false;
   }
  });
  $('#theform').submit();
 });

 $('#theform').submit(function () {
  return ok;
 });
</script>

希望这可以帮助!;)

于 2012-08-12T19:16:32.967 回答