Hi,
ich habe ein Problem mit einer request Abfrage, in dieser rufe ich eine Datei mit einem bestimmten String aus den ich verarbeiten möchte. Nur jetzt habe ich das Problem das in der Funktion drin ein Syntax Fehler laut Firefox auftritt.
Komischer weise funktioniert die ausgabe aber, wenn ich mitten in die Funktion die Variable mit dem enthaltenen String über ein Alert ausgeben lasse. Ab da an gibt es dann keine probleme mehr.
Funktion:
HTML-Code:
<script language="javascript" type="text/javascript">
var id_name;
var http_request;
var request_status
var request_content_v;
function request (url,id) {
id_name = id;
http_request = false;
request_content_v = "";
request_status = false;
document.getElementById(id_name).value = "load...";
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// zu dieser Zeile siehe weiter unten
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
//alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
http_request.onreadystatechange = request_content;
http_request.open('GET', url, true);
http_request.send(null);
document.getElementById(id_name).value = request_content_v;
return request_status;
}
function request_content () {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
request_content_v = http_request.responseText
request_status = true;
} else {
alert('Bei dem Request ist ein Problem aufgetreten.');
request_status = false;
}
}
}
</script>
Wenn ich in dieser Funktion am Ende ein Alert reinbringe funktioniert es.
Darf ich mal bitte vorbei?! Das geht nach Kompetenz... Danke! | | | Einmal dachte ich, ich hätte Unrecht. Hab mich aber getäuscht!
"Es ist gelogen, dass Videogames Kids beeinflussen. Hätte Pacman das getan, würden wir heute durch dunkle Räume irren, Pillen fressen und elektronische Musik hören."
Überleg mal wofür AJAX steht. (Tipp: Gleich das erste Wort birgt das Problem).
Du kannst nicht synchron arbeiten, wenn du ein Request in den Hintergrund abschickst.
Du musst deine Verarbeitung der Antwort im sog. CallBack (das wird aufgerufen, wenn die Response vom Webserver geschickt wurde) durchführen.
Das CallBack ist in deinem Fall die Funktion "request_content".
Das bedeutet das Asynchronous im AJAX.
Mit einer Wartezeit würde ich in keinem Fall arbeiten. Wenn dann mit einem Flag, das gesetzt wird, sobald die Response da ist (falls du wirklich den Eindruck von synchroner Verarbeitung erwecken musst).
<script language="javascript" type="text/javascript">
var id_name;
var http_request;
var request_status
var request_content_v;
var response_present=false;
function request (url,id) {
id_name = id;
http_request = false;
request_content_v = "";
request_status = false;
document.getElementById(id_name).value = "load...";
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// zu dieser Zeile siehe weiter unten
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
//alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
http_request.onreadystatechange = request_content;
http_request.open('GET', url, true);
http_request.send(null);
response_present=false;
while(!response_present) {
//do nothing but wait
if (response_present) {
break;
}
}
document.getElementById(id_name).value = request_content_v;
return request_status;
}
function request_content () {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
request_content_v = http_request.responseText
request_status = true;
} else {
alert('Bei dem Request ist ein Problem aufgetreten.');
request_status = false;
}
response_present = true;
}
}
</script>
Besser: Verarbeitung im CallBack
Code:
<script language="javascript" type="text/javascript">
var id_name;
var http_request;
var request_status
var request_content_v;
var response_present=false;
function request (url,id) {
id_name = id;
http_request = false;
request_content_v = "";
request_status = false;
document.getElementById(id_name).value = "load...";
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
// zu dieser Zeile siehe weiter unten
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
//alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
http_request.onreadystatechange = request_content;
http_request.open('GET', url, true);
http_request.send(null);
response_present=false;
//das hier wird auch nicht funktionieren, ist die Frage, ob das überhaupt gebraucht wird?!
//Kann wohl auch über request_content abgehandelt werden
return request_status;
}
function request_content () {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
request_content_v = http_request.responseText
request_status = true;
document.getElementById(id_name).value = request_content_v;
} else {
alert('Bei dem Request ist ein Problem aufgetreten.');
request_status = false;
}
}
}
</script>
Beides selbstverständlich ungetestet
Und könnte mal jemand diese ellenlange URL kürzen? Sprenung der Seitenbreite müsste mit Peitschenhieben bestraft werden