Ajax Problem
Lupinius
- javascript
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.
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
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.
Danke für Deinen Hinweis Struppi,
Schönen Sonntag,
Hotte
Hi,
Wenn der alte Request aber noch nicht fertig abgehandelt wurde, erzeugt das im IE einen Fehler.
Gut zu wissen, merci.
Gruesse, Joachim
Hi,
var http_request = getXMLHttpObject();
da innerhalb Deiner Funktion mit var definiert gilt http_request nur lokal.
Gruesse, Joachim
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...
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
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.
Salve
Die Fehlerkonsole ist leer?
Die Fehlerkonsole ist voller nichts. Gerade das macht mich so ratlos.
Salve
Durch Firebug habe ich nun herausgefunden, dass eine Antwort ankommt, allerdings wird diese anscheinend von FF gekonnt ignoriert.
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);
}
Moin,
if (http_request.readyState == 4) {
alert(http_request.responseText);
}
Na das wird ja auch Zeit!
Have a Cigar ;-)
Hotte