Pompiuses Skrevet 30. mai 2006 Del Skrevet 30. mai 2006 Jeg har allerede skrivd denne på engelsk, så jeg bare kopierer inn teksten: I've made a small AJAX script (see below). All it does is make a request to server (when onblur on the input box), gets some xml back from the server and then prints a div-tag on the html page based on the xml. This all works fine, but it only works one time. Then I have to reload the page for it to work again. Why?? (i'm using IE6 on winxp) The code is based on this tutorial: http://www.webpasties.com/xmlHttpRequest/x...tutorial_1.html Perhaps the problem lies within the getHTTPObject() method (which I've just copied from the tutorial)? </html> <head> <script language="javascript" type="text/javascript"> // The url to post to var url = "http://localhost:8080/secrets/webServices/ajaxValidation.jsp"; // Posts the username to server for validation using AJAX (the http object) function validateUsername() { var usernameValue = document.getElementById("username").value; var ajaxValue = "true"; var registerValue = "true"; var parameters = "username=" + encodeURI(usernameValue) + "&ajaxValidation=" + encodeURI(ajaxValue) + "®isterValidation=" + encodeURI(registerValue); http.onreadystatechange = handleUsernameHttpResponse; http.open("POST", url, true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("Content-length", parameters.length); http.setRequestHeader("Connection", "close"); http.send(parameters); } // handles the response from the server function handleUsernameHttpResponse() { if (http.readyState == 4) { // wait until request is completed if(http.status == 200) { // check that request is ok var xmlDocument = http.responseXML; // Use the XML DOM to unpack the xml var error = xmlDocument.getElementsByTagName('error').item(0).firstChild.data; document.getElementById('usernameErr').innerHTML = ""; if(error == -1){ // -1 means no error. document.getElementById('usernameErr').innerHTML = ""; document.getElementById('usernameOK').innerHTML = "Legal username"; }else{ document.getElementById('usernameOK').innerHTML = ""; document.getElementById('usernameErr').innerHTML = "Illegal name"; } } } } // Creates an HTTP object to enable communication to the server function getHTTPObject() { var xmlhttp; /*@cc_on @if (@_jscript_version >= 5) try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } @else xmlhttp = false; @end @*/ if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; } var http = getHTTPObject(); // Create the HTTP object </script> </head> <body> <div style="color:#FF0000;" id="usernameErr"></div> <div id="usernameOK"></div> <br /> <table border="0" width="100%"> <tr> <td><input type="text" size="20" value="" name="username" id="username" onblur="validateUsername();"></td> </tr> </table> </body> </html> Lenke til kommentar
Drømmemannen Skrevet 1. juli 2006 Del Skrevet 1. juli 2006 (endret) Får du feilmeldinger eller laster den bare inn de samme dataene på nytt? Hvis det er det siste er det verd å prøve å skru av nettleser-cachingen. Edit: Hmm, du oppretter bare ett XHR-objekt. Prøv å flytte kallet på getHTTPObject() inn i validateUsername()-funksjonen slik at du oppretter et nytt XHR-objekt for hver request. Endret 1. juli 2006 av balletryne Lenke til kommentar
saivert Skrevet 5. august 2006 Del Skrevet 5. august 2006 Får du feilmeldinger eller laster den bare inn de samme dataene på nytt? Hvis det er det siste er det verd å prøve å skru av nettleser-cachingen. Edit: Hmm, du oppretter bare ett XHR-objekt. Prøv å flytte kallet på getHTTPObject() inn i validateUsername()-funksjonen slik at du oppretter et nytt XHR-objekt for hver request. 6416548[/snapback] Jeg har hatt samme problemet. Eneste nettleseren som faktisk støtter XMLHttpRequest skikkelig er Opera9 og Opera var jo den siste nettleseren som fikk denne støtten (tilbake til Opera8). Du er nødt for å oprette en ny instans av XMLHttpRequest objektet for hver forespørsel ellers vil nettlesere som Internet Explorer og Firefox ha problemer. Opera støtter gjenbruk av en instans fint. ---- Eneste jeg nå lurer på er hvordan unngå minnetrøbbel? Hvordan skal jeg vite når jeg skal slette forrige instans? Lenke til kommentar
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å