jQuery $ .POST仅在某个函数执行后才有效。

时间:2011-07-30 00:05:32

标签: jquery ajax post callback get

我有一个几乎完成的jQuery项目,对于用户数据成功验证的最后部分,它使用$ .post函数执行外部PHP脚本,传递用户输入信息的参数。

我的问题是,我的回调函数只有在我之后放置一个警报功能时才有效。

作品:

$.post("backend.php", dataString, 
    function(response) {
        if (response=="1") {
            alert("ok"); 
        }
    }, 'html'); 

alert('test');

但是如果我在结束标记之后没有发出警告,我的脚本就不会在回调中发出警告“ok”或其他任何内容。

你们有没有看到我的代码出了什么问题?

谢谢!

3 个答案:

答案 0 :(得分:2)

我的猜测是$.post()脚本之后会出现导致页面更改或导致帖子停止或失败的内容。

从根本上说,alert('test')所做的就是阻止你的代码等待按下OK按钮。使代码突然运行的唯一方法是,如果在第二次警报之后代码中有某些内容正在执行,那么该帖子就会搞乱。

请记住帖子是异步的。它会在后台发生,而你运行的任何其他代码都会在alert('ok')运行时运行。

所以,我的猜测是你网页上的其他内容正在运行并弄乱帖子。

答案 1 :(得分:1)

所以我在这里参加派对的时间已经很晚了,但我在这里面临的问题似乎完全相同,并最终找到了解决方案。在我的情况下,我有一个表单提交按钮,我也试图用作JQuery POST调用的触发器。问题是,当提交表单时,它显然取消了JQuery POST调用。

在我的情况下,解决方法是将提交按钮更改为常规按钮,然后在与POST调用相同的JQuery函数中执行表单提交 - POST调用之后。我还需要在表单提交的调用中引入一个小延迟。所以,它看起来像这样:

$("#saveStuff").click(function () {  //my save button, no longer a submit
        $.post('UpdateStatusFlag', {}, function (data) {
              //some irrelevant stuff here
            }
        });
        setTimeout("$('#MyForm').submit()", 100); //needed the small delay to allow the post call to complete
});

希望这可以帮助一些人犯同样的错误。

答案 2 :(得分:1)

这里的年轻球员(比如我自己)非常微妙的陷阱。我做了完全相同的事情,发布在表单的提交事件上。当然,表单同时提交和发布帖子,所以当帖子的响应回来时,表单已刷新并重置自己。混乱占主导地位。

在我的情况下,我真的不希望表单实际提交,所以在我的提交函数中添加return false;作为最终语句很好地排序了。

E.g:

$('#myForm').submit(function() {
    $.post('myurl',{some params});
    return false;
};