我是AJAX的新手,並且有此問題。AJAX(XMLHTTPRequest)時間延遲
我正在創建一個照片庫頁面,並在其上創建了一個管理整個事情的Javascript類。下面是從類中的方法,它調用這是早些時候成功初始化XMLHTTPRequest對象:
this.AJAX_update = function(id) {
//initialize AJAX - this is done successfully
this.AJAX_initialize();
var url = "ScriptLibrary/gallery_update.php?img=" + id;
//this.ajax_request is an internal variable which is
//initialized in this.AJAX_initialize() and is
//XMLHTTPRequest type
this.ajax_request.open("GET", url, true);
this.ajax_request.onreadystatechange = processAJAX;
this.ajax_request.send(null);
}
我無法弄清楚如何調用類中的onreadystatechange內部方法,所以我創建了調用這個類之外的功能類中的方法提供了類的實例已在頁面上創建。頁面上的類的實例是變量'gallery'。下面是函數:
function processAJAX() {
gallery.AJAX_process();
}
這裏是AJAX_process()函數的代碼:
this.AJAX_process = function() {
if (this.ajax_request.readyState == 4) {
if (this.ajax_request.status == 200) {
//get the response
var response = this.ajax_request.responseXML;
//Here I set the internal variables according to the value
//returned from the server
//...........
//...........
//...........
//change image on the page
var self = this;
setTimeout(function() {
self.swap_dissolve();
}, 50);
}
}
}
所以,這裏是我的問題:
起初,我試圖直接調用內部函數通過只做這個.wap_dissolve(),但它不起作用。基本上,AJAX_process()方法根據來自服務器的響應更改某些類的內部變量的值,並在swap_dissolve()中使用這些值實際更改頁面上的圖像。會發生什麼是swap_dissolve()不會正確更改圖像,因爲它看到空值或未更新變量AJAX_process()的值更新。當我添加時間延遲時,問題消失了。我不明白爲什麼會這樣。我檢查readyState == 4,所以服務器的響應已經完全返回,因此無論函數設置的值是否爲final,都可以立即使用,爲什麼我不能立即使用這些值等待?
我的代碼中的任何建議或錯誤,以解決這個問題將不勝感激。
如果您有任何問題,請發表回覆。
謝謝。
謝謝你的建議。我沒有你能做到這一點。但是,這仍然不能解決問題。我仍然需要等待。什麼導致swap_dissolve()不能馬上工作? – miki725 2010-10-24 21:30:56
@ miki725現在,什麼值你沒有看到更新? – 2010-10-24 22:23:09
我剛剛實現了關於onreadystatechange = function()的最後一個建議......並且似乎解決了這個問題。非常感謝你。 – miki725 2010-10-25 00:17:43