Da Hacker
Erfahrenes Mitglied
Hallo liebe Community,
ich sitze jetzt schon mehrere Tage an einer Exception die mir von der XMLHTTPRequest-Komponente geworfen wird. Ziemlich dubios das Ganze. Die Fehlermeldung sieht laut FireBug (Firefox-Extension zum Debuggen von Skripts) so aus:
uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://lwtv.de/projects/lwlife/js/javascript.js :: interpretRequest :: line 40" data: no]
Ich habe keine Ahnung was das heißen soll. Yahoo bietet mir auch nur unzufriedenstellende Ergebnisse, die nicht auf mein Problem anwendbar sind.
Ich poste jetzt mal der Reihe nach meine Codeblöcke mit Beschreibung.
1. Ich habe eine Auswahlliste. Jedes Mal wenn der User hier Änderungen vornimmt, frage ich die entsprechenden Werte mittels Ajax ab:
2. Die Javascript-Funktion "load_streetinfo()" erwartet zwei Parameter. Den aktuell ausgewählten Index der Auswahlliste und den Container in den die Informationen reingeschrieben werden sollen. Hier mal Javascript.js:
Ich denke das ist soweit noch nachvollziehbar. Oder?
3. Im obigen Javascript-Code rufe ich also game.php(mit der action streetinfo) auf und übergebe als GET-Parameter die Variable "street" - das ist einfach der ausgewählte Index der Auswahlliste.
4. Aber genau hier scheint sich schon irgendwo ein Fehler zu verstecken, den die Javascriptfunktion "interpretRequest()" zu verursachen scheint! Ich habe aber schon meine erstes - erfolgreiches - Ajaxscript in dieser Art geschrieben und es gab keine Probleme. Diesmal habe ich nur versucht das ganze etwas logischer in drei Funktionen aufzusplitten und anfangs hat es auch geklappt. Bis ich dann irgendwann weitere Variablen ins Spiel gebracht habe und alles aus dem Ruder gelaufen ist.
Ich hoffe, dass ich alles verständlich ausdrücken konnte und dass mir hier jemand einen Weg aus meiner Ausweglosigkeit zeigen kann.
Möchtet ihr euch den Fehler am aktuellen Beispiel ansehen, dann habe ich hier einen Login für euch bereitgestellt:
http://lwtv.de/projects/lwlife/?username=tutorials&password=tutorials
Einfach "Weiterspielen!" anklicken und der erste Screen, der erscheint ist schon das Sorgenkind. Hier einfach den Wert in der Auswahlliste(mit den Straßennamen) ändern und ihr solltet - zumindest in der FireBug-Extension - einen Fehler sehen.
Das wirklich seltsame ist ja, dass mir FireBug dennoch eine Antwort anzeigt, die auch halbrichtig ist:
"Ich bin Ajax Datum: XYZ<br />Und ganz wichtig auch die Strasse: ".
Genau das liefert eigentlich die PHP-Datei zurück. Nur es fehlt halt leider die Straße, was aber wie ich vermute an dieser dämlichen Exception liegt.
Wenn ihr irgendwas nicht versteht, fragt einfach. Ich werde versuchen es euch möglichst genau zu erklären.
Riesigen Dank im Voraus
Adam
ich sitze jetzt schon mehrere Tage an einer Exception die mir von der XMLHTTPRequest-Komponente geworfen wird. Ziemlich dubios das Ganze. Die Fehlermeldung sieht laut FireBug (Firefox-Extension zum Debuggen von Skripts) so aus:
uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://lwtv.de/projects/lwlife/js/javascript.js :: interpretRequest :: line 40" data: no]
Ich habe keine Ahnung was das heißen soll. Yahoo bietet mir auch nur unzufriedenstellende Ergebnisse, die nicht auf mein Problem anwendbar sind.
Ich poste jetzt mal der Reihe nach meine Codeblöcke mit Beschreibung.
1. Ich habe eine Auswahlliste. Jedes Mal wenn der User hier Änderungen vornimmt, frage ich die entsprechenden Werte mittels Ajax ab:
HTML:
<select name="Select1" name="D1" onchange="javascript:load_streetinfo( document.streets.Select1.value, 'streetinfo' );">
2. Die Javascript-Funktion "load_streetinfo()" erwartet zwei Parameter. Den aktuell ausgewählten Index der Auswahlliste und den Container in den die Informationen reingeschrieben werden sollen. Hier mal Javascript.js:
Javascript:
function ajaxRequest()
{
// Request erzeugen
if (window.XMLHttpRequest) {
request = new XMLHttpRequest(); // Mozilla, Safari, Opera
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
} catch (e) {}
}
}
return request;
}
function interpretRequest(request, container_id)
{
switch (request.readyState) {
// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
case 4:
if (request.status != 200) {
document.getElementById(container_id).innerHTML = "Es ist ein Fehler aufgetreten: " + request.status;
} else {
var content = request.responseText;
// den Inhalt des Requests in das <div> schreiben
if(content == '')
{
document.getElementById(container_id).innerHTML = 'Es gibt keine Daten';
}
else
{
document.getElementById(container_id).innerHTML = content;
}
}
break;
default:
document.getElementById(container_id).innerHTML = "Es ist ein Fehler aufgetreten: " + request.status;
break;
}
}
function load_streetinfo( street_id, container_id )
{
var request = ajaxRequest();
// überprüfen, ob Request erzeugt wurde
if (!request) {
document.getElementById(container_id).innerHTML = "Fehler beim Abruf der Informationen!";
return false;
} else {
var url = './game.php?action=streetinfo';
// Request öffnen
request.open('GET', url, true);
// Requestheader senden
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Request senden
request.send( 'street='+street_id );
// Request auswerten
request.onreadystatechange = interpretRequest(request, container_id);
}
}
Ich denke das ist soweit noch nachvollziehbar. Oder?
3. Im obigen Javascript-Code rufe ich also game.php(mit der action streetinfo) auf und übergebe als GET-Parameter die Variable "street" - das ist einfach der ausgewählte Index der Auswahlliste.
Javascript:
var url = './game.php?action=streetinfo';
// PER GET die PHP-Datei aufrufen, die sich um die Verarbeitung des Auswahllisten-Index und um Bereitstellung der vom Index abhängigen Daten kümmert.
request.open('GET', url, true);
// HIER NOCH DEN AUSWAHLINDEX MITSCHICKEN:
request.send( 'street='+street_id );
4. Aber genau hier scheint sich schon irgendwo ein Fehler zu verstecken, den die Javascriptfunktion "interpretRequest()" zu verursachen scheint! Ich habe aber schon meine erstes - erfolgreiches - Ajaxscript in dieser Art geschrieben und es gab keine Probleme. Diesmal habe ich nur versucht das ganze etwas logischer in drei Funktionen aufzusplitten und anfangs hat es auch geklappt. Bis ich dann irgendwann weitere Variablen ins Spiel gebracht habe und alles aus dem Ruder gelaufen ist.
Ich hoffe, dass ich alles verständlich ausdrücken konnte und dass mir hier jemand einen Weg aus meiner Ausweglosigkeit zeigen kann.
Möchtet ihr euch den Fehler am aktuellen Beispiel ansehen, dann habe ich hier einen Login für euch bereitgestellt:
http://lwtv.de/projects/lwlife/?username=tutorials&password=tutorials
Einfach "Weiterspielen!" anklicken und der erste Screen, der erscheint ist schon das Sorgenkind. Hier einfach den Wert in der Auswahlliste(mit den Straßennamen) ändern und ihr solltet - zumindest in der FireBug-Extension - einen Fehler sehen.
Das wirklich seltsame ist ja, dass mir FireBug dennoch eine Antwort anzeigt, die auch halbrichtig ist:
"Ich bin Ajax Datum: XYZ<br />Und ganz wichtig auch die Strasse: ".
Genau das liefert eigentlich die PHP-Datei zurück. Nur es fehlt halt leider die Straße, was aber wie ich vermute an dieser dämlichen Exception liegt.
Wenn ihr irgendwas nicht versteht, fragt einfach. Ich werde versuchen es euch möglichst genau zu erklären.
Riesigen Dank im Voraus
Adam