[英]Ajax call not responding on repeated request
我有一個帶有下拉菜單的頁面。 onchange
事件調用 Javascript function(下),其中包括檢索數據並填充TEXTAREA
的 Ajax 塊。 從表面上看,一切正常。
我可以 select 列表中的任何項目都沒有問題。 但是,如果我 select 之前已選擇一個項目,則 Ajax 調用似乎掛起。 看起來可能是一些奇怪的緩存問題之類的。 如果我關閉瀏覽器並重新加載頁面,所有項目都會再次工作,直到我重新選擇。
當它掛起時,我已經測試了readyState
和status
屬性,但我什么也沒得到。 我錯過了什么嗎?
該頁面是身份驗證背后的客戶端項目,因此我無法發布 URL,但這是 Ajax 代碼。 這是在 PHP 頁面中,但沒有與此相關的 PHP 腳本。
function getText( id ) {
var txt = document.getElementById( "MyText" );
txt.disabled = "disabled";
txt.innerText = "";
txt.className = "busy";
var oRequest = zXmlHttp.createRequest();
oRequest.open( "get", "get_text.php?id=" + id, true );
oRequest.send( null );
oRequest.onreadystatechange = function() {
if( oRequest.readyState == 4 ) {
if( oRequest.status == 200 ) {
txt.innerText = oRequest.responseText;
} else {
txt.innerText = oRequest.status + ": " + oRequest.statusText;
}
txt.disabled = "";
txt.className = "";
oRequest = null;
}
}}
編輯:代碼塊似乎有點古怪; 它不會讓我包含最后的}
,除非它與前一個在同一行。
發送請求后,您正在設置onreadystatechange
function。 如果它需要很長時間(即如果它到達服務器),這可能會起作用,因為在它嘗試調用回調之前會有延遲。
但是,如果頁面被緩存,瀏覽器可能會嘗試立即在send
方法中調用onreadystatechange
。 將您的作業移至onreadystatechange
到open/send
代碼之前。
嗨,緩存是由於相同的 url 被重復調用。 如果您動態更改 URl,則可以解決此問題。 就像通過在請求中添加帶有當前時間的查詢字符串(或任何隨機重新生成的數字),您可以更改 url 而不會影響結果
我猜你遇到了緩存問題。 我注意到 Internet Explorer 在緩存 ajax 調用方面比 Firefox 更積極。 確定正在發生的事情的一種方法是使用 Fiddler2。 此應用程序監視您的 web 流量,您將能夠查看瀏覽器是否正在發出請求,以及您收到的響應中返回的緩存標頭。
您可以從http://www.fiddlertool.com/fiddler/下載 fiddler2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.