簡體   English   中英

Microsoft Edge緩存Ajax請求?

[英]Microsoft Edge caching Ajax requests?

所以我有一個用於在網站上加載內容的ajax系統,它的工作原理如下:

單擊按鈕時,將調用Javascript函數:

onclick="doSomething('abc')"

我的Javascript看起來像這樣:

//Ajax
var xmlhttp;
function loadXMLDoc(url,cfunc) {
    if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    } else {
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=cfunc;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}
function doSomething(var) {
    loadXMLDoc("http://www.website.com/ajax/doSomething.php?var="+var, function() {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("response-container").innerHTML=xmlhttp.responseText;
        }
    });
}

PHP文件只調用echo的文本,如下所示:

echo "Response here";

通常,每次運行此Javascript函數時,我都會使用此類型的系統在具有特定id的元素中加載新內容。

這已經完美地工作了3年多,但由於某種原因,Microsoft Edge正在緩解這一點的反應。 因此內容根本沒有正確生成。 所以你運行一次,並且在x時間內它將繼續返回相同的緩存響應。

有什么想法正確解決這個問題是什么? 我已經看到提到使用標題,但我不確定如何在這種情況下應用修復。

我們在Edge和IE 10/11上的緩存ajax請求也有問題。 我們的解決方案是使用HTTP-header Cache-Control: no-cache這也可以在沒有時間戳的情況下工作。

是的,XMLHttpRequest沒有固有的意味着它不應該被緩存。 瀏覽器就像其他HTTP請求一樣對待它們。 您可以完全控制瀏覽器使用HTTP標頭緩存內容的方式。

在IE或MS Edge中禁用緩存的最佳方法是執行此操作:

只需按f12,然后轉到網絡選項卡,找到工具欄中的第四個按鈕,標題為:始終從服務器刷新。

它會在沒有緩存的情況下每次發送請求。 在此輸入圖像描述

經過大量的搜索和故障排除后,我終於找到了解決這個問題的解決方案。 添加標頭Cache-Control:no-cache不起作用,它實際上在我的情況下弄亂了故障排除。 我曾使用標頭Pragma:no-cache來修復IE11中相同的AJAX緩存問題,但它仍然無法用於Edge。 並且Cache-Control標頭為Chrome和FF修復了它(對於http 1.1規范)。

根據Microsoft數據庫中的缺陷,如果存在Cache-Control標頭,則忽略Pragma標頭:

https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10739540/

所以添加邏輯只使用Pragma for IE和Edge,而只使用Cache-Control用於符合http 1.1的broswers就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM