Avatar billede znopie Nybegynder
04. oktober 2010 - 17:06 Der er 10 kommentarer

Ajax OOP, fejler

Hej Alle eksperter

Jeg sidder og laver et lille script til at kalde ajax med, problemet er bare den ikke rigtig vil som jeg.

function $(element) { return document.getElementById(element); };
/* Ajax.Request */

var Ajax = {
    XMLHttp: function()
    {
        if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else
        if (window.ActiveXObject) { return new ActiveXObject('Microsoft.XMLHTTP'); }
    },

    Request: function(url)
    {
        this.transport = new Ajax.XMLHttp();
        this.transport.open('GET', url, true);
        this.transport.onreadystatechange = function() {
        return this.transport.responseText + ' - ABE';
        }
    }
   
}
var jtest = new Ajax.Request('index.php?ajax');
for (var property in jtest) {    document.writeln ("\n " + property + ": " + jtest[property] + "<br>"); }


det eneste output den kommer med er
transport: [object XMLHttpRequest]
Avatar billede jokkejensen Novice
04. oktober 2010 - 17:21 #1
transport er vel også eneste property der er ?¨

At et XmlHttpRequest så har endnu flere..

Prøv alert(jtest.transport.responseXml)

/J
Avatar billede znopie Nybegynder
04. oktober 2010 - 17:36 #2
Hej Jokke

Jeg får bare et "undefined" i alert

hvorfor kan den ikke bare sende this.transport.responseText retur?
Avatar billede jokkejensen Novice
04. oktober 2010 - 17:55 #3
.. responseXML, jeg bruger xml da jeg ofte får xml retureret fra et asynkront xml og javascript kald :)

responseText er fin hvis det var er en streng du skal have fat i.
Avatar billede znopie Nybegynder
04. oktober 2010 - 18:50 #4
Lige pt er det bare en streng :)

Men problemet er jeg ikke kan hente den streng med min Ajax class :( - hvorfor kan den ikke det?
Avatar billede jokkejensen Novice
04. oktober 2010 - 19:29 #5
http://www.bytemycode.com/snippets/snippet/329/

find evt lidt inspiration der, jeg bruger altid selv bare Jquery, et større bibliotek, der håntere opgaven ret godt.
Avatar billede intenz Novice
04. oktober 2010 - 20:43 #6
onreadystatechange er en callback funktion, og du kan derfor ikke returnere noget fra den på den måde du forsøger. Det skal returneres asynkront, og du skal derfor bruge en callback mere, der bliver kaldt når resultatet er klar.

Prøv at ændre din request til:

Request: function(url, callback)
    {
        this.transport = new Ajax.XMLHttp();
        this.transport.open('GET', url, true);
        this.transport.onreadystatechange = function() {
            callback(this.transport.responseText + ' - ABE');
        }
    }


og så kald den med:

new Ajax.Request('index.php?ajax', function(jtest) {
    for (var property in jtest) {    document.writeln ("\n " + property + ": " + jtest[property] + "<br>"); }
});
Avatar billede znopie Nybegynder
07. oktober 2010 - 11:16 #7
Kan simpelhen ikke få den til at virke :(

Har set de guides der er på nettet, og syntes metoden ligner rigtig meget.

Nu har jeg omskrevet den lidt, men kan stadig ikke hente en tekst via ajax.

function $(element) { return document.getElementById(element); };
/* Ajax.Request */

var Ajax = {
    GetRequest: function()
    {
        return (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    },

    Request: function(requestUrl)
    {
        this.transport = new Ajax.GetRequest();
        this.transport.open('GET', requestUrl, true);
        this.transport.onreadystatechange = this.responseData;
        this.transport.send(null);
    },
   
    responseData: function()
    {
        if(this.transport.readyState == 4)
        {
            alert( this.transport.responseText );
        }
    }
   
}
var jtest = new Ajax.Request('index.php?ajax');

for (var property in jtest) { document.writeln ("\n " + property + ": " + jtest[property] + "<br>"); }
Avatar billede intenz Novice
07. oktober 2010 - 12:18 #8
Læste du mit svar før?

Får du en alert på:
alert( this.transport.responseText );
?

Du laver en ny instans af Ajax objectet her:
this.transport = new Ajax.GetRequest();

Det er vist ikke nødvendigt, du kan bare:
this.transport = this.GetRequest();
Avatar billede znopie Nybegynder
07. oktober 2010 - 13:12 #9
Der kommer bare en alert med teksten undefined, så kan ikke hente teksten fra mit ajax kald :/
Avatar billede znopie Nybegynder
07. oktober 2010 - 23:22 #10
Nu virker den efter at have ændret et parameter fra true til false, men kan kun få teksten som alert, og ikke som output på siden

Her er koden som virker med alert
function $(element) { return document.getElementById(element); };
/* Ajax.Request */

var Ajax = {
    GetRequest: function()
    {
        return (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    },

    Request: function(requestUrl, element)
    {
        this.transport = new Ajax.GetRequest();
        this.transport.open('GET', requestUrl, false);
        this.transport.send(null);
        alert( this.transport.responseText );
    }

}
new Ajax.Request('index.php?ajax');
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester