我是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