【问题标题】:jQuery AJAX timing issuejQuery AJAX 计时问题
【发布时间】:2010-02-03 07:09:26
【问题描述】:

在我的后端,我使用的是 jquery 1.4.1 和最新的 UI 1.8rc1。我定义了几个按钮来做一些事情……一个是使用调用 php 文件的序列化函数创建某种类型的页面,然后重新加载整个页面。在本地,这总是很有魅力!但是一旦我把它放在我的供应商网络服务器上,它只在大约 5% 的时间内工作。代码如下:

    buttons: {
'Seite erstellen': function() {
$.post("webadmin/pages.create.serialize.php",$("#page-form").serialize());
$(this).dialog('close');
location.reload(true);
},
'Abbrechen': function() {
$(this).dialog('close');
}
},

有趣的是,当我在 location.reload 部分之前发出警报时 - 它总是有效的。所以似乎存在一个时序问题,即执行序列化但在页面重新加载之前无法完成。我知道使用序列化的意思是不必重新加载页面,但我建立了导航等,所以我需要重新加载。 (现在考虑一下......我真的可以序列化所有东西......无论如何)有一个简单的解决方案吗?有没有像我可以内置的小计时器让它等到序列化完成?这是正常行为吗?

【问题讨论】:

    标签: php jquery ajax serialization


    【解决方案1】:

    您需要利用 $.post() 方法中的回调:

    $.post(
           "webadmin/pages.create.serialize.php",
           $("#page-form").serialize(),
           function(data, textStatus, xhr) {  
               alert("I'm done loading now!");
           }
    );
    

    不完全确定回调函数内部的“this”指的是什么,所以我将把实现作为练习留给读者。 :-)

    【讨论】:

    • "this" 指的是按钮对象所属的对话框对象。所以要正确,他需要定义类似“var self = this;”的东西在对话框中但在回调之外,然后在回调中使用“self”而不是“this”。
    • 谢谢,我本来打算这样做,但后来质疑是否有更好的方法来避免 var x = this bit。
    • 谢谢 - 现在一切都像魅力一样!我决定一起退出重新加载并更新回调中的所有div!
    猜你喜欢
    • 2014-12-02
    • 2011-02-11
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多