首页 文章

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

提问于
浏览
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 String . 两个返回都没有被命中,但是如果我在其中一个中抛出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是“成功”,它仍会跳过成功功能 .

2 回答

  • 0

    我不知道你为什么使用 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

    就像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>
    

    希望这可以帮助! ;)

相关问题