2011-09-03 33 views
2

我想有一个JavaScript函数调用页面加载和卸载,它将设置和取消设置会话变量。目前的JavaScript(与PHP线)看起来像这样(用了jQuery)

window.onbeforeunload = function() { 
    $.post('Example.php?y=".$id."&dir=0'); 
} 

$(document).ready(function() { 
    $.post('Example.php?y=".$id."&dir=1'); 
}); 

这些都包含在一个PHP脚本,$ id为传递到页面的一个变量。 Example.php是一个使用ajax调用的脚本,它只需将变量$ id添加到作为$ _SESSION变量存储的数组(如果dir = 1),并在dir = 0时从数组中除去该变量。

问题是,这只是有时按预期工作。当我加载页面时,会话数组总是正确更新。当我卸载页面时,它有时会起作用,有时不起作用。我的猜测是,因为这些是异步函数,变量是由.ready函数调用,在页面卸载后设置的。但即使我让页面坐了一会儿,然后卸载它,这种不一致仍然存在。有什么我在卸载功能做错了吗?

  • 尝试设置AJAX:在后呼叫

  • 使用jQuery的$(window).unload()构建试过了,这只是没有工作假的。

  • 使用谷歌浏览器

+0

请注明信息,如果将卸载的帖子发送到服务器,则应该在服务器日志中包含此信息。 –

回答

1

$。员额是异步的;这意味着当函数返回时,请求可能还没有完成。

尝试使请求同步:

$.ajax('Example.php..', { 
    async: false, 
    type: 'POST' 
}); 

jQuery.ajax文档。

+0

感谢您的快速响应。试过这个虽然无济于事。 – CaptainStiggz

+0

,但问题将出现在页面关闭时加载而不是卸载,重要的是,如果发送请求 –