stiansa Skrevet 26. august 2007 Skrevet 26. august 2007 Hallo! Jeg har følgende javascript-funksjoner: function getXMLHTTPRequest(){ var req = null; try{// Firefox, Opera 8.0+, Safari req = new XMLHttpRequest(); }catch (e){// Internet Explorer try{ req = new ActiveXObject("Msxml2.XMLHTTP"); }catch (e){ req = new ActiveXObject("Microsoft.XMLHTTP"); } } if (req == null){ alert("Nettleseren din støtter ikke Ajax."); } return req; } function postEvent(ID, dayOfMonth, dtStart, dtEnd, strSubject, strBody){ var sReq = getXMLHTTPRequest(); var rnd = parseInt(Math.random()*999999999999999); sReq.open("GET", "inc/ajax.asp?f=postEvent&ID=" + ID + "&dtStart=" + dtStart + "&dtEnd=" + dtEnd + "&strSubject=" + strSubject + "&strBody=" + strBody + "&rnd=" + rnd, true); sReq.onreadystatechange = function(){ if(sReq.readyState == 4){ parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; } } sReq.send(null); } Dette virker for så vidt, og <SPAN id="Events_1"></SPAN> (f.eks.) blir oppdatert med sReq.responseText. Problemet er at sReq.responseText ikke inneholder noenting! Jeg vet med sikkerhet at serverscriptet ajax.asp virker som det skal, for jeg kan teste det ved å sende URL-en i et browservindu, og da vises den informasjonen jeg forventer. Hva gjør jeg galt? Stian
Gjest Slettet+142 Skrevet 26. august 2007 Skrevet 26. august 2007 Prøv å erstatt sReq.open("GET", "inc/ajax.asp?f=postEvent&ID=" + ID + "&dtStart=" + dtStart + "&dtEnd=" + dtEnd + "&strSubject=" + strSubject + "&strBody=" + strBody + "&rnd=" + rnd, true); med var ajax_url = "inc/ajax.asp?f=postEvent&ID=" + ID + "&dtStart=" + dtStart + "&dtEnd=" + dtEnd + "&strSubject=" + strSubject + "&strBody=" + strBody + "&rnd=" + rnd; alert(ajax_url); sReq.open("GET", ajax_url, true); Sjekk at alert(ajax_url) viser den url-en du vil den skal vise
luxus Skrevet 26. august 2007 Skrevet 26. august 2007 (endret) Jeg ser at du har: if ( sReq.readyState == 4 ) { parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; } Prøv å sett inn slik at det blir: if ( sReq.readyState == 4 ) { if ( sReq.status === 200 ) { // Alt OK i fra server parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; } else { // Fikk en feil i fra server, f.eks. statuskode 404 eller liknende alert("Fikk feilkode i fra server: "+sReq.status+", "+sReq.statusText); } } Da vil du få vite litt mer om svaret fra serveren, hvis noe feilet. 404 betyr f.eks. at dokumentet ikke fantes, altså feil i URL. En ting til: Koden din er: parent.document.getElementById([...] .. hvor kommer parent fra? det holder med document.getElementById :-) ...Og enda en ting: Funksjonen din heter postEvent, det ser ut som noe sendes til lagring på server(?), og da er det mer riktig å sende data via POST, enn å bruke GET. Men det er jo ikke såå viktig, kanskje ;-) Endret 26. august 2007 av luxus
stiansa Skrevet 26. august 2007 Forfatter Skrevet 26. august 2007 (endret) Jeg ser at du har: if ( sReq.readyState == 4 ) { parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; } Prøv å sett inn slik at det blir: if ( sReq.readyState == 4 ) { if ( sReq.status === 200 ) { // Alt OK i fra server parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; } else { // Fikk en feil i fra server, f.eks. statuskode 404 eller liknende alert("Fikk feilkode i fra server: "+sReq.status+", "+sReq.statusText); } } Da vil du få vite litt mer om svaret fra serveren, hvis noe feilet. 404 betyr f.eks. at dokumentet ikke fantes, altså feil i URL. En ting til: Koden din er: parent.document.getElementById([...] .. hvor kommer parent fra? det holder med document.getElementById :-) ...Og enda en ting: Funksjonen din heter postEvent, det ser ut som noe sendes til lagring på server(?), og da er det mer riktig å sende data via POST, enn å bruke GET. Men det er jo ikke såå viktig, kanskje ;-) 9363480[/snapback] Prøvde å sjekke om status == 200, men får bare feilmelding (bruker FF-pluginen Firebug): Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" Jeg bruker parent fordi scriptet kjøres i en <IFRAME> og skal oppdatere en <SPAN> i hoveddokumentet. Sender data til serveren for lagring i databasen, ja. Prøvde POST i stedet for GET, men kunne ikke merke noen forskjell. Dataene blir lagret i begge tilfellene. Nå fikk jeg det forresten til å virke! På en måte. Dataene editeres og postes fra en <IFRAME> som sagt (dette er en slags popup), og oppdaterer parent.document. Når brukeren vil sende dataene klikker han på en BUTTON med onclick='postEvent(blablabla...)'. I tillegg til postEvent er også funksjonen for å fjerne <IFRAME>-en i onclick-en. Slik: onclick='postEvent(blablabla);window.top.hidePopWin;'. Når jeg fjernet hidePopWin ble responseText plutselig fylt med riktig data, og <SPAN id='Events_1'></SPAN> ble oppdatert. Men nå står altså <IFRAME>-en framme, og det skal den ikke. Forslag? Hah! Jeg fant det ut! Ved å flytte window.top.hidePopWin(); inn i postEvent-funksjonen etter parent.document.getElementById("Events_" + dayOfMonth).innerHTML = sReq.responseText; så løste det seg. :D:D Takk, takk. Det var godt å få snakket om dette. Hehe... -s Endret 26. august 2007 av stiansa
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå