3 回答

TA貢獻1780條經驗 獲得超1個贊
我相信您需要使用async : false
參數來使請求同步(默認情況下是異步的)。
同步請求將鎖定瀏覽器,直到完成為止。如果請求是異步的,則頁面只會繼續卸載。它足夠快,以至于請求甚至都沒有時間觸發。

TA貢獻1818條經驗 獲得超8個贊
最好的解決方案是使用navigator.sendBeacon。它是全新的功能,已開始在新版本的瀏覽器中實現。該功能在Chrome 39和Firefox 31以后的瀏覽器中可用。在撰寫本文時,Internet Explorer和Safari不支持該功能。為了確保您的請求能夠在尚不支持新功能的瀏覽器中發送,您可以使用以下解決方案:
var navigator.sendBeacon = navigator.sendBeacon || function (url, data) {
var client = new XMLHttpRequest();
client.open("POST", url, false); // third parameter indicates sync xhr
client.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
client.send(data);
};
但是,此函數不允許您注冊成功回調。

TA貢獻1796條經驗 獲得超4個贊
您的函數和Ajax調用看起來不錯,所以我的猜測是,在ajax調用有時間進入服務器并返回之前,瀏覽器窗口已關閉。窗口關閉時,ajax調用可能返回一些信息,請嘗試向您的ajax調用添加錯誤功能,以查看是否為這種情況:
error: function (xhr, textStatus) {
alert('Server error: '+ textStatus);
}
- 3 回答
- 0 關注
- 542 瀏覽
添加回答
舉報