Я новичок в AJAX и имею эту проблему.
Я создаю страницу фотогалереи и на ней я создал класс 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);
}
}
}
Итак, вот мой вопрос:
Изначально я пыталсявызвать внутреннюю функцию напрямую, просто выполнив this.swap_dissolve (), однако она не работает.По сути, метод AJAX_process () изменяет значения внутренних переменных определенного класса в соответствии с ответом от сервера, и эти значения используются в swap_dissolve () для фактического изменения изображения на странице.Что произойдет, так это то, что swap_dissolve () не изменит изображение правильно, потому что оно видит нулевые или не обновленные значения переменных AJAX_process () обновленными.Когда я добавил задержку, проблема исчезла.Я не понимаю, почему это происходит.Я проверяю, что readyState == 4, поэтому ответ от сервера был полностью возвращен, поэтому любые значения, которые устанавливает функция, являются окончательными и могут использоваться сразу, так почему я не могу использовать эти значения сразу иподождать?
Буду весьма признателен за любые предложения или ошибки в моем коде для решения этой проблемы.
Если у вас есть вопросы ко мне, пожалуйста, оставьте ответ на этот вопрос.
Спасибо.