Problem bei einem request unter Javascript 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. Beispiel: [code]Fehler: Syntax-Fehler Quelldatei: [URL]http://www.lammpee.de/toolbar_inc/archive_list.php?archive=news[/URL] Zeile: 1, Spalte: 1 Quelltext: Design Update Start*,*[URL="http://www.lammpee.de/archive,news,entry,4,1.html*;*Die"]http://www.lammpee.de/archive,news,entry,4,1.html*;*...[/URL][/code]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]<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>[/html]Wenn ich in dieser Funktion am Ende ein Alert reinbringe funktioniert es. [html] http_request.onreadystatechange = request_content; http_request.open('GET', url, true); http_request.send(null); alert(request_content_v); document.getElementById(id_name).value = request_content_v; return request_status; }[/html] |
AW: Problem bei einem request unter Javascript Ich behaupte mal ganz frech, das liegt an der Verzögerung, die durch das Alert ausgelöst wird. Ich würde versuchen dem Script an der stelle eine "Verschnaufpause" zu gönnen, bis id_name [strike]ausgegeben[/strike] übergeben wird. Evtl. mit setTimeout oder einer Pseudo-warte-auf-etwas-oder-rechne-etwas-Funktion. |
AW: Problem bei einem request unter Javascript Ü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). |
AW: Problem bei einem request unter Javascript BenniG., wie würde man das in diesem speziellen Fall scripten? |
AW: Problem bei einem request unter Javascript Möglichkeit 1 mit Flag: [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; 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> [/code]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> [/code] Beides selbstverständlich ungetestet ;) Und könnte mal jemand diese ellenlange URL kürzen? Sprenung der Seitenbreite müsste mit Peitschenhieben bestraft werden ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.