卸载时MooTools AJAX请求

时间:2010-10-02 11:25:27

标签: ajax mootools request

我正在尝试在用户编辑条目时锁定db-table中的行。 表格lock中有一个字段,我在页面加载时使用php设置1。

然后我试图在卸载页面时解锁条目(将其设置为0)。 这是我的方法。它在IE中工作正常,但在Firefox,Chrome等中没有.... window.onbeforeunload适用于所有浏览器,我测试过。 他们只是不做请求 但 如果我在req.send()之后简单地发出警报;它适用于某些浏览器,但不适用于safari或chrome。因此我尝试在其后添加其他内容,以便在请求之后还有其他事情要做,但它不起作用。

function test(){ var req = new Request({ url:'inc / ajax / unlock_table.php?unlock_table = regswimmer& unlock_id =', }); req.send(); 警报( 'BLA'); //仅适用于此!?!?!? }

window.onbeforeunload = test;

我已经尝试了不同的方式来执行请求,但似乎没有任何工作。并且请求本身有效,而不是在这个星座中。

任何帮助将不胜感激!

由于

1 个答案:

答案 0 :(得分:4)

默认情况下,请求是异步的。这意味着它会分叉而不关心完整的,可能会或可能不会(有时间完成)。通过在那里发出警报,您可以确保有足够的时间来完成请求。

基本上,你可能最好尝试其中一件事:

  1. async: false添加到请求对象选项中。这将确保请求在离开之前完成。
  2. 使用图像代替跟踪像素。
  3. 移动到method: "get",因为它不包含额外的标头和cookie信息,所以可以更快完成(如果异步延迟太多则还原为此)
  4. 你可以这样做(也是$ _GET)

    new Element("img", {
        src: "inc/ajax/unlock_table.php?unlock_table=regswimmer&unlock_id=" + someid + "&seed=" + $random(0, 100000),
        styles: {
            display: "none"
        }
    }).inject(document.body);
    

    最后,使用window.addEvent("beforeunload", test);或者你可能会搞乱mootools的内部垃圾收集