什麼工作不工作:AJAX調用PHP腳本在IE
我的代碼工作跨越現在所有的瀏覽器,看起來像這樣:
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()
虛假似乎沒有足以讓它爲我工作。我必須將該設置放入$.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調用。事情是,它會在每次關閉窗口之前創建一個確認窗口,這會讓用戶惱火。有沒有什麼方法可以讓我在不需要return語句的情況下在IE中工作?我已經瀏覽了很多網頁,但還沒有找到適合我的東西。
希望我對我的問題已經很清楚了。
編輯:
思想也許我應該增加我的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;
?>
哇...我已經設定'異步'是真實的和虛假的,它什麼也沒做。我甚至使用過$ .ajaxSetup()之前沒有用,我甚至倒在你鏈接的確切文章上。這一次我似乎已經很幸運,它的工作。謝謝。我會在上面編輯我的代碼以反映對我有用的東西。 – Francis 2012-03-09 19:03:27
@Francis - 我不認爲'async'是'$ .post'的選項,只能指向'$ .async'。 – 2012-03-09 19:04:58
噢 ...那我不知道。整個項目是我第一次使用AJAX,所以這是一個非常有學問的經歷。 – Francis 2012-03-09 19:09:19