Javascript 为什么`$.post`只有在后面出现'alert()`时才起作用?

Javascript 为什么`$.post`只有在后面出现'alert()`时才起作用?,javascript,post,Javascript,Post,我有以下javascript代码: $.post("<receiver>", postdata); $.post(“,postdata”); 并且不总是获取postdata。如果我编写以下代码,所有代码都可以正常工作: $.post("<receiver>", postdata); alert('bla-bla-bla, read me for a second'); $.post(“,postdata”); 警惕(“布拉布拉布拉布拉,读我一会儿”); 为什么??

我有以下javascript代码:

$.post("<receiver>", postdata);
$.post(“,postdata”);
并且不总是获取postdata。如果我编写以下代码,所有代码都可以正常工作:

$.post("<receiver>", postdata);
alert('bla-bla-bla, read me for a second');
$.post(“,postdata”);
警惕(“布拉布拉布拉布拉,读我一会儿”);

为什么??当javascript运行时,页面在“保存”按钮上发生更改。但是我需要在重定向之前发送post数据。

您应该在AJAX调用的成功回调中重定向:

$.post("<receiver>", postdata, function() {
    window.location.href = '...';
});

您的警报将导致脚本暂停,从而有时间完成
$.post()


您应该将重定向脚本放入
$.post()
回调中。

,因为它会导致延迟。当您按下OK时,请求(至少需要几毫秒)就会完成,并且根据它可以执行相应的操作

为了防止这种情况,您可以传递一个回调函数,该函数在请求得到响应后运行

$.post( url, postdata, function() {
    // Success.
} )

.post是异步的

如果在post过程()中更改页面,post请求将被中止。 您的
警报
正在阻止此页面更改


您应该将.post替换为.ajax同步请求,在成功时验证表单提交(
返回true;
)。或者按照@DarinDimitrov或@Curt

啊的建议去做,这样看来你的问题缺少的部分是你在点击某个东西时发送数据是吗?想必是联系?该链接会导致浏览器立即跟随该链接,在您的示例中,该警报会使浏览器延迟到足以让您的帖子有足够的时间完成的程度

您需要确保该链接的默认操作被阻止,并改为在$.post()的回调中执行重定向:

$(“a.some_类”)。单击(函数(evt)
{
evt.preventDefault();//确保浏览器不跟随链接
//在这里收集您的帖子数据。。。
var$this=这个;
$.post(“”,postdata,function()
{
window.location.href=$this.attr(“href”);
});
})

查看此问题以获得详细解释:。但我需要使用标准事件处理程序将所有参数传递到新页面。是否可以使用preventDefault,然后在发布后再次调用默认处理程序?我需要更多信息:您确实在单击链接吗?您所指的“所有参数”是什么?您是指查询字符串参数吗?如果是,我上面粘贴的代码将使用标记的原始href属性。因此,如果该属性包含查询字符串参数,那么它们将被很好地发送。实际上,它只是延迟了单击链接的默认执行。“a”是没有标记的以下元素:
$.post( url, postdata, function() {
    // Success.
} )
$("a.some_class").click(function(evt)
{
    evt.preventDefault(); // makes sure browser doesn't follow the link

    // gather your post data here ...

    var $this = this;
    $.post("<receiver>", postdata, function()
    {
        window.location.href = $this.attr("href");
    });
})