Javascript AJAX(XMLHTTPRequest)时间延迟
我是AJAX新手,有这个问题 我正在创建一个photogallery页面,并在上面创建了一个Javascript类来管理整个过程。下面是类中的一个方法,该类调用先前已成功初始化的XMLHTTPRequest对象:Javascript AJAX(XMLHTTPRequest)时间延迟,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我是AJAX新手,有这个问题 我正在创建一个photogallery页面,并在上面创建了一个Javascript类来管理整个过程。下面是类中的一个方法,该类调用先前已成功初始化的XMLHTTPRequest对象: this.AJAX_update = function(id) { //initialize AJAX - this is done successfully this.AJAX_initialize(); var url = "ScriptLibrary/ga
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();
}
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);
}
}
}
以下是AJAX_process()函数的代码:
function processAJAX() {
gallery.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);
}
}
}
所以,我的问题是:
最初,我尝试直接调用内部函数,方法是这样做。swap_dissole(),但它不起作用。基本上,AJAX_process()方法根据服务器的响应更改某些类内部变量的值,这些值在swap_dissole()中用于实际更改页面上的图像。可能发生的情况是swap_dissole()无法正确更改图像,因为它看到变量AJAX_process()的值为null或未更新。当我添加时间延迟时,问题消失了。我不明白为什么会这样。我确实检查readyState==4,因此服务器的响应已经完全返回,因此函数设置的任何值都是最终值,可以立即使用,那么为什么我不能立即使用这些值,并且必须等待
如果我的代码中有任何解决此问题的建议或错误,我们将不胜感激
如果你对我有任何问题,请发表对这个问题的回复
谢谢。您想使用“闭包”(例如,将函数对象传递给setTimeout) 想象一下(见鬼,在代码中替换它以查看): 警报应显示“废话”(或您分配给它的任何内容)。该值可用于匿名函数对象,因为已创建闭包绑定(函数可以访问封闭函数作用域的变量) 这是一个参考资料:更多的是一个软介绍: 快乐编码 编辑/p.S.您还可以编写AJAX处理程序,如下所示(这只是强制执行正确的“this”上下文的一个闭包——一些框架为此提供了方便的函数):
您甚至可以使用双重绑定,但是…再次祝您编码愉快:-)谢谢您的建议。我不相信你能做到。然而,这仍然不能解决问题。我还得等。是什么导致swap_dissole()无法立即工作?我刚刚实现了您关于onreadystatechange=函数()的最后一个建议。。。这似乎解决了问题。非常感谢。之前发生的事情是swap\u dissole()没有看到变量值进程\u AJAX()更新。显然,按照您建议的方式调用进程_AJAX()可以解决这个问题。