(AJAX) Status ist immer Null
razhthak
- javascript
hallo,
ich verzweifle leider an einem problem - welches kürzlich scheinbar aus dem nichts aufgetreten ist und sich nicht beheben lassen will.
im prinzip handelt es sich um die suchfunktion einer einfache ajax-applikation. und zwar nur um die suche, alle anderen ajax-teile funktionieren weiterhin.
hier der codeausschnitt:
<script language="JavaScript">
<!--
function searchReq() {
sReq = new erzXMLHttpRequestObject();
sReq.open('POST','suche.php','true');
sReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
sReq.send('name='+document.suchform.suchwort.value);
sReq.onreadystatechange = suche;
}
function suche() {
if (sReq.readyState == 4) {
if (sReq.status == 200) {
var content = sReq.responseText;
document.getElementById('datenbereich').innerHTML = content;
} else {
alert('MIST!.');
}
}
}
//-->
</script>
das sieht doch alles ganz in ordnung aus? leider ist der status immer null, womit nie die daten in das skript übernommen werden.
ich wäre über alle guten ideen wirklich dankbar.
lg
hier der codeausschnitt:
[code lang=javascript]<script language="JavaScript">
Das language Attribut ist seit mehr als 10 Jahren nicht mehr im Einsatz, wo hast du das her?
<!--
Auch HTML Kommentare im Scriptblock sind nicht mehr zeitgemäß oder erwartest du, dass ein Browser der ersten Generation deine Seite besuchen könnte?
sReq.open('POST','suche.php','true');
was soll die Zeichnekette 'true' hier bewirken? Verwechselst du es mit dem Schlüsselwort true?
das sieht doch alles ganz in ordnung aus? leider ist der status immer null, womit nie die daten in das skript übernommen werden.
Das kann ich mir nicht vorstellen, da der Server immer einen Status liefert. Wie hast du das ermittelt? In deinem Code steht nur alert('MIST'); Besser wäre es, wenn du dir dort den status z.b. mal anzeigen läßt.
Struppi.
hier der codeausschnitt:
<script language="JavaScript">
Das language Attribut ist seit mehr als 10 Jahren nicht mehr im Einsatz, wo hast du das her?
<!--
Auch HTML Kommentare im Scriptblock sind nicht mehr zeitgemäß oder erwartest du, dass ein Browser der ersten Generation deine Seite besuchen könnte?
naja, beides aus selfhtml ;)
sReq.open('POST','suche.php','true');
was soll die Zeichnekette 'true' hier bewirken? Verwechselst du es mit dem Schlüsselwort true?
ja, scheinbar. anscheinend sind nicht alle tutorials fehlerfrei...
das sieht doch alles ganz in ordnung aus? leider ist der status immer null, womit nie die daten in das skript übernommen werden.
Das kann ich mir nicht vorstellen, da der Server immer einen Status liefert. Wie hast du das ermittelt? In deinem Code steht nur alert('MIST'); Besser wäre es, wenn du dir dort den status z.b. mal anzeigen läßt.
Naja, bevor da "Mist" gestanden ist, hab ich da den Status ausgeben lassen - da war er immer 0.
Habe jetzt das 'true' ohne die '' geschrieben - ändert sich trotzdem nichts. :(
Der Vollständigkeit halber, hier noch das Formular:
[code lang=html]<form name="suchform"><input type="text" name="suchwort"> <input type="submit" value="suche" onclick="searchReq()"></form>
hier der codeausschnitt:
[code lang=javascript]<script language="JavaScript">Das language Attribut ist seit mehr als 10 Jahren nicht mehr im Einsatz, wo hast du das her?
<!--
Auch HTML Kommentare im Scriptblock sind nicht mehr zeitgemäß oder erwartest du, dass ein Browser der ersten Generation deine Seite besuchen könnte?
naja, beides aus selfhtml ;)
Bei dem ersten Punkt, ist das Unwahr (zumindest nicht aus einer halbwegs aktuellen version) und auch HMTL Kommentare findest du, wenn überghaut nur vereinzelt.
sReq.open('POST','suche.php','true');
was soll die Zeichnekette 'true' hier bewirken? Verwechselst du es mit dem Schlüsselwort true?
ja, scheinbar. anscheinend sind nicht alle tutorials fehlerfrei...
Ich kann mir kein JS Tutorial vorstellen, dass 'true' verwendet.
das sieht doch alles ganz in ordnung aus? leider ist der status immer null, womit nie die daten in das skript übernommen werden.
Das kann ich mir nicht vorstellen, da der Server immer einen Status liefert. Wie hast du das ermittelt? In deinem Code steht nur alert('MIST'); Besser wäre es, wenn du dir dort den status z.b. mal anzeigen läßt.
Naja, bevor da "Mist" gestanden ist, hab ich da den Status ausgeben lassen - da war er immer 0.
Auch das kann nicht sein.
Struppi.
Auch das kann nicht sein.
warum kann das nicht sein?
darin liegt vielleicht die erklärung für das problem. leider war der status bisher immer 0.
Auch das kann nicht sein.
warum kann das nicht sein?
darin liegt vielleicht die erklärung für das problem. leider war der status bisher immer 0.
Weil der Server immer einen status zurückliefert.
Struppi.
hallo,
ich verzweifle leider an einem problem - welches kürzlich scheinbar aus dem nichts aufgetreten ist und sich nicht beheben lassen will.
Bei Deinem POST fehlen ein paar Dinge oder sind falsch, wie Struppi schon schrieb.
Schau mal:
if(hash.method == 'POST'){
xhr.open("POST", hash.url, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Content-length", hash.params.length);
xhr.setRequestHeader("Connection", "close");
xhr.send(hash.params);
xhr.onreadystatechange = rx;
}
else{
var url = hash.url + '?' + hash.params;
xhr.open("GET", url, true);
xhr.send(null);
xhr.onreadystatechange = rx;
}
Viele Grüße,
Rolf
Hallihallo!
Vielleicht hat das so direkt erstmal Nichts mit dem eigentlichen Problem zu tun, aber mir ist Folgendes aufgefallen:
Du verwendest ein
<form name="suchform"><input type="text" name="suchwort"> <input type="submit" value="suche" onclick="searchReq()"></form>
Das führt dazu, dass das onclick- Event ausgelöst wird (die Funktion searchReq() wird ausgeführt), und anschliessend wird das Formular abgeschickt. Durch das Abschicken des Formulars wird aber die Seite neu geladen (Standard für action ist, soweit ich weiss, die aktuelle Seite).
Das "echte" Abschicken des Formulars musst Du also unterbinden, damit Dein Javascript weiter seine Arbeit verrichten kann. Das tust Du mit
<input type="submit" value="suche" onclick="return searchReq();">
(beachte das "return") und ein abschliessendes
return false;
in der Funktion searchReq.
Damit kannst Du zumindest verfolgen, ob und wie sich der Status des Requests ändert.
Weil die Seite und damit das arbeitende Javascript noch _da_ sind.
Wenn sich dann immer noch Nichts tut, kann man weiter den Fehler im JS suchen.
Beste Grüsse,
Tobias Hahner