Ответ Mootool ajax readystate всегда равен 1?

#ajax #mootools

#ajax #mootools

Вопрос:

Я пытался создать этот класс mootools (версия 1.2.4) для обработки моих ajax-запросов. Но мои скрипты возвращают только readystate 1. никогда не доходит до 2,3 или 4, метод handleHttpResponse, похоже, запускается только один раз. Я выставил оповещения для просмотра, но получаю только 1. есть идеи?

 var replyXML = new Class ({
    /* GDW AJAX REQUEST SCRIPT */
    /* By: Jonathan Robidas 2011-05-13 */
    initialize : function(url){
        this.http = this.getHTTPObject();   // We create the HTTP Object
        this.url = url;                                     // Requested server-side script
        this.response = '';                             // String returned by AJAX, Set after positive response
    },
    returnResponse : function() {
        return this.response;
    },
    handleHttpResponse : function() {
        alert(this.http.readyState);
        if (this.http.readyState == 4) {
            if(this.http.status==200) {
                alert("YA YA 2");
                this.response = this.http.responseText;
                return true;
            }
        }
    },
    requestXML : function() {
        this.http.open("GET", this.url, true);
        //this.http.onreadystateshange = this.handleHttpResponse();
        this.http.onload = this.handleHttpResponse();
    },
    getHTTPObject : function() {
        var xmlhttp;
        if(window.XMLHttpRequest){
            xmlhttp = new XMLHttpRequest();
        }
        else if (window.ActiveXObject){
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            if (!xmlhttp){
                xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
            }
        }
        return xmlhttp;
    }
});
  

Вот как я его запускаю на данный момент. мое содержимое равно нулю, но мой URL-адрес является рабочим XML-файлом. значит, он не должен быть пустым … ?

 <script language="Javascript" type="text/Javascript">
    window.addEvent('domready', function() {
        loadXML = new replyXML('gdwcommreply_genxml.php?getfield=idvideoamp;fieldid=64amp;parentid=59');
        loadXML.requestXML();
        content = loadXML.returnResponse();
        alert(content);
        /*
        x=content.documentElement.childNodes;
        for (i=0;i<x.length;i  ) {
            document.write(x[i].nodeName);
            document.write(": ");
            document.write(x[i].childNodes[0].nodeValue);
            document.write("<br />");
        }
        */
    });
</script>
  

Протестировано в Google Chrome, Firefox 4, Internet Explorer 7 и 8, результат тот же.
Вот пример XML, который предполагается выводить скриптом: http://jerenovici.net/gdwcommreply_genxml.php?getfield=idvideoamp;fieldid=64amp;parentid=59 итак, я знаю, что мой php, генерирующий xml, в порядке.

Спасибо!!

Ответ №1:

Зачем вы изобретаете велосипед? Если вы используете mootools, создать ajax-запрос чрезвычайно просто (docs, ссылающийся на новейшую версию, но в данном случае запрос не изменился):

 new Request({
    url : './gdwcommreply_genxml.php?getfield=idvideoamp;fieldid=64amp;parentid=59',
    onSuccess : function(responseText, responseXML){

        /* here, do stuff with your response */

    },
    onFailure : function(xhr){

        /* the XMLHttpRequest instance. */

    }
}).send();
  

Тогда вы уверены, что URL правильный?

Комментарии:

1. я согласен. 1 за прагматичность.

2. Спасибо, я использую этот класс, сработало с первой попытки, спасибо за помощь!