jQuery .submit函数在ajax请求后没有返回适当的值

时间:2012-08-03 03:15:08

标签: jquery ajax forms

所以我在这里得到的非常直接:

$("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 String。两个返回都没有被命中,但是如果我在其中一个中抛出alert(),条件确实有效。但是,如果我在Firebug中逐步执行此操作,则看起来似乎永远不会执行success函数中的内容。

每次都会返回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是'成功',它仍会跳过成功函数。

2 个答案:

答案 0 :(得分: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请求。

答案 1 :(得分: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>

希望这有帮助! ;)