3 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊
我相信您需要使用async : false
參數(shù)來(lái)使請(qǐng)求同步(默認(rèn)情況下是異步的)。
同步請(qǐng)求將鎖定瀏覽器,直到完成為止。如果請(qǐng)求是異步的,則頁(yè)面只會(huì)繼續(xù)卸載。它足夠快,以至于請(qǐng)求甚至都沒(méi)有時(shí)間觸發(fā)。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
最好的解決方案是使用navigator.sendBeacon。它是全新的功能,已開(kāi)始在新版本的瀏覽器中實(shí)現(xiàn)。該功能在Chrome 39和Firefox 31以后的瀏覽器中可用。在撰寫本文時(shí),Internet Explorer和Safari不支持該功能。為了確保您的請(qǐng)求能夠在尚不支持新功能的瀏覽器中發(fā)送,您可以使用以下解決方案:
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);
};
但是,此函數(shù)不允許您注冊(cè)成功回調(diào)。

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的函數(shù)和Ajax調(diào)用看起來(lái)不錯(cuò),所以我的猜測(cè)是,在ajax調(diào)用有時(shí)間進(jìn)入服務(wù)器并返回之前,瀏覽器窗口已關(guān)閉。窗口關(guān)閉時(shí),ajax調(diào)用可能返回一些信息,請(qǐng)嘗試向您的ajax調(diào)用添加錯(cuò)誤功能,以查看是否為這種情況:
error: function (xhr, textStatus) {
alert('Server error: '+ textStatus);
}
- 3 回答
- 0 關(guān)注
- 541 瀏覽
添加回答
舉報(bào)