AJAX调用PHP脚本无法在IE中工作

时间:2012-03-09 17:06:47

标签: php ajax internet-explorer

什么有效:

我的代码现在适用于所有浏览器,如下所示:

window.onbeforeunload = function(){
   $.ajaxSetup({
   async: false
});


 $.post('./archive_onBeforeUnload.php?', {contact_id: contact_id}, function(){
 }).error(function(xhr, textStatus, error){
    console.log(xhr.statusText);
    console.log(textStatus);
    console.log(error);
    }); 
 }

async内将$.post()设置为false似乎不足以让它为我工作。我必须在$.ajaxSetup中设置该设置才能在所有浏览器中使用。


我的项目是一种使用HTML和PHP创建的聊天程序。我遇到的问题是如果这个人使用顶部的X按钮关闭窗口,我需要运行一些PHP才能使我的程序仍能正常运行。所以我做了一些搜索,最后得到了这段代码:

window.onbeforeunload = function(){
    $.post('./archive_onBeforeUnload.php?', {contact_id: contact_id}, function(){
    }).error(function(xhr, textStatus, error){
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
    });

}

这会调用archive_beforeUnload.php并运行我需要的少量PHP。在FireFox,Safari和Chrome中运行得很好但在IE中我似乎有问题。似乎没有足够的时间让IE实际完全完成调用,这会稍微扰乱我的程序的其余部分。我有一个方法是使用像这样添加一个return语句:

window.onbeforeunload = function(){
    $.post('./archive_onBeforeUnload.php?', {async: 'true', cache: 'false', contact_id: contact_id}, function(){
    }).error(function(xhr, textStatus, error){
        console.log(xhr.statusText);
        console.log(textStatus);
        console.log(error);
    });
    return 'I need to fix the timer here.  Without this it doesn\'t work in IE';
}

这似乎给了IE足够的时间来实际完成AJAX调用。问题是,它会在窗口每次关闭之前创建一个确认窗口,这会让用户感到烦恼。有没有什么方法可以让我在IE中工作而不需要return语句?我在网上看了很多,但还没找到适合我的东西。

希望我在我的问题上已经足够清楚了。

编辑:

我想我应该添加我的PHP脚本:

<?php
session_start();
require_once('client_init.php');

$sqlRequeue = 'UPDATE S2G_CHAT_TRAVELLER_QUEUE SET';
$sqlRequeue .= ' isOpen = 1';
$sqlRequeue .= ' WHERE contactID='.$contact_id;
$resRequeue = $conn_dd->query($sqlRequeue);
$resRequeue->close;

$_SESSION['s2g_chat_messages_shown'] = $default_messages_shown;
?>

1 个答案:

答案 0 :(得分:1)

我认为问题是$.post()是异步的,所以函数在完成之前就会返回。

您似乎可以使用$.async()功能do the same call synchronously

编辑:或者你可以change the default AJAX settings to be synchronous