Lupinius: Ajax Problem

Salve

Ich habe mich nach langer Zeit des davor fürchtens mich mal an Ajax gewagt. Hab ein allerdings ein Problem und mir fällt keine Lösung ein.
Mein bisheriger Code ist der Folgende:

function getXMLHttpObject() {  
	var xmlHttp = null;  
	try  
    {  
    	xmlHttp = new XMLHttpRequest();  
    }  
    catch (e)  
     {  
    	try  
        {  
        	xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");  
        }  
        catch (e)  
        {  
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");  
        }  
    }  
    return xmlHttp;  
}  
  
function sendRequest(Befehl) {  
	  
    var http_request = getXMLHttpObject();  
    if (http_request == null) {  
    	alert("Ihr Browser unterstützt kein Ajax.");  
    }  
  
    http_request.open('GET', "phpskript.php?string=" + document.getElementById('input').value, false);  
    http_request.onreadystatechange = handleAnswer;  
    http_request.send(null);  
  
}  
  
function handleAnswer() {  
    if (http_request.readyState == 2) {  
        alert("Anfrage gesendet");  
    }  
  
    if (http_request.readyState == 3) {  
        alert("Antwort wird erwartet");  
    }  
  
    if (http_request.readyState == 4) {  
        alert("Antwort bekommen:" + http_request.responseText);  
    }  
}

Allerdings wird keine einzige Nachricht angezeigt und verstehe einfach nicht warum.

--
sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
  1. hi,

    auf die späte Stunde vermisse ich bei Dir ein _gemeinsames_ Objekt, mit dem der request sowie die Response abgewickelt wird.

    Try this:

      
    <script type="text/javascript">  
    	var req;  
    	function ajaxRequest(url){  
    		req = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");  
    		req.onreadystatechange = ajaxResponse;  
    		req.open("GET", url, true);  
    		req.send(null);  
    	}  
      
    	function ajaxResponse(){  
    		if (req.readyState == 4) {  
    			if (req.status == 200) {  
    				document.getElementById('ajaxresponse').innerHTML = req.responseText;  
    			}  
    			else{  
    				document.getElementById('ajaxresponse').innerHTML = "Problem mit Ajax";  
    			}  
    		}  
    	}  
      
    </script>  
      
    
    

    Also mit dem Objekt named 'req' gehts dann weiter hier.

    Hotte

    1. Try this:

      Aber Vorsicht dieser Code funktioniert nicht immer. Da der XMLHttpRequest global ist, wird bei jedem Aufruf von ajaxRequest() das Objekt neu erzeugt und das alte überschrieben. Wenn der alte Request aber noch nicht fertig abgehandelt wurde, erzeugt das im IE einen Fehler. Besser ist es nicht bei jedem Aufruf ein neues XMLHttpRequest zu erzeugen, sondern nur eins und dieses bei einem Abbruch wiederverwenden. Dazu muss dann die abort() Methode verwendet werden.

      Struppi.

      1. Danke für Deinen Hinweis Struppi,

        Schönen Sonntag,
        Hotte

        --
        Sonne
      2. Hi,

        Wenn der alte Request aber noch nicht fertig abgehandelt wurde, erzeugt das im IE einen Fehler.

        Gut zu wissen, merci.

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
  2. Hi,

    var http_request = getXMLHttpObject();

    da innerhalb Deiner Funktion mit var definiert gilt http_request nur lokal.

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
    1. Salve

      Ich habe die Variable jetzt global deklariert, und mit dem IE und Google Chrome funktioniert jetzt auch alles wunderbar. Aber nicht mit FF. Und das macht mich noch ratloser als zuvor...

      --
      sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
      1. Hi,

        Ich habe die Variable jetzt global deklariert, und mit dem IE und Google Chrome funktioniert jetzt auch alles wunderbar. Aber nicht mit FF.

        dann nim doch hottis Variante oder ... hier habe ich auch noch ein test rumfliegen...

        Ansonsten: was sagt die Fehlerkonsole? Hast Du ein mal xmlHttp ausgegeben? Hast Du im ff den cache geleert?

        Gruesse, Joachim

        --
        Am Ende wird alles gut.
      2. Ich habe die Variable jetzt global deklariert, und mit dem IE und Google Chrome funktioniert jetzt auch alles wunderbar. Aber nicht mit FF. Und das macht mich noch ratloser als zuvor...

        Die Fehlerkonsole ist leer?

        Struppi.

        1. Salve

          Die Fehlerkonsole ist leer?

          Die Fehlerkonsole ist voller nichts. Gerade das macht mich so ratlos.

          --
          sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
  3. Salve

    Durch Firebug habe ich nun herausgefunden, dass eine Antwort ankommt, allerdings wird diese anscheinend von FF gekonnt ignoriert.

    --
    sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
  4. Salve

    Tja, jetzt antworte ich nochmal auf mich selbst ;)

    Das Problem war, das die Ajax Anfrage bei mir syncrom mit dem Code läuft - und in der XMLHttpRequest Dokumentation unter "onreadystatechange" der folgende Satz zu finden ist:

    You should also not use this with synchronous requests.

    Nachdem ich einen Codeblock geändert habe funktioniert alles:

    http_request.open('GET', "datei.txt", false);  
    http_request.send(null);  
      
    if (http_request.readyState == 4) {  
        alert(http_request.responseText);  
    }
    
    --
    sh:( fo:| ch:? rl:( br:> n4:? ie:{ mo:) va:) js:| de:> zu:} fl:| ss:) ls:[  
    1. Moin,

      if (http_request.readyState == 4) {
          alert(http_request.responseText);
      }

      Na das wird ja auch Zeit!
      Have a Cigar ;-)

      Hotte

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.