ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
1098
1098
EMPFEHLEN
-
24.12.08 13:34 #1
Hi Leute, hab ein kleines Problem.
Ich mach mir einen HTTPRequest, konfiguriere ihn und setze ihn ab, so weit, so gut.
Das Problem ist jezt nur, dass die auszuführende Funktiion nie ausgeführt wird, ich aber keine Ahnung habe wieso, habe es bisher immer so gemacht und hatte eigentlich keine Probleme damit.
So, der Code:
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
function makeRequest(url, action) { var httpRequest; //Beginn anlegen des XMLHTTPREquest objektes (FINGER WEG) if (window.XMLHttpRequest) { // Mozilla, Safari, ... httpRequest = new XMLHttpRequest(); if (httpRequest.overrideMimeType) { httpRequest.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } } } if (!httpRequest) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } switch(action) { case SHOW_CONTENT: httpRequest.onreadystatechange = function() { printContent(httpRequest); }; httpRequest.open('GET', url, false); httpRequest.send(''); break; case SHOW_NEWS: httpRequest.onreadystatechange = function() { printNews(httpRequest); }; httpRequest.open('GET', url, false); httpRequest.send(''); break; case ADD_GB_ENTRY: //ersetzen des buttons duch "einen Moment bitte..." elem = document.getElementById("addGbEntryCont"); tn = document.createTextNode("einen Moment bitte...") el = document.getElementById("addGbEntryBut"); elem.replaceChild(tn,el); //button ersetzt author = document.getElementById('gbEntryName').value; msg = formatMessage(document.getElementById('gbEntryMsg').value); httpRequest.onreadystatechange = function() { entryAdded(httpRequest); }; httpRequest.open('GET', url + "?author=" + author + "&msg=" + msg, true); httpRequest.send(''); break; case ADJUST: httpRequest.onreadystatechange = function() { adjusted(httpRequest); }; url=url.split('?'); httpRequest.open('POST', url[0], false); httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); httpRequest.setRequestHeader("Content-length", url[1].length); httpRequest.setRequestHeader("Connection", "close"); httpRequest.send(url[1]); break; } return true; }
und eine der funktionen:
Code javascript:1 2 3 4 5 6 7 8 9
function printContent(httpRequest) { if (httpRequest.readyState == 4) { if (httpRequest.status == 200) { document.getElementById("content").innerHTML = httpRequest.responseText; } else { alert('There was a problem with the request.'); } } }
Es müsste nicht die ganze makeRequest funktion sein, aber ich denke mir is besser zum Verständnis
Vielen Dank schon mal für die Hilfe und... frohe Weihnachten
mfg me
-
Moin,
deine switch-Fälle, du beziehst dich da auf action, aber was übergibst du da als action?
Sind das Variablen(namen), weil falls sie das nicht sind sondern Strings, müsstest du die Fälle in Anführungszeichen setzen.
-
24.12.08 14:40 #3
Sind ganz normale int werte, also 1, 2, 3
//edit: und ja, sind Variablennamen
//edit2
vl sollte ich noch dazusagen, dass die Case fälle funktionieren, er geht rein, führt den Darin enthaltenen Code aus (mitm Netbeans javascript debugger geprüft) und schließt die Fkt wie gewünscht ab.
Das Problem ist nur, dass die auszuführende Funktion, im ersten case Fall printContent(..) einfach nicht ausgeführt wird.
Hab schon geprüft ob ich vl einen error Code zurückbekomme, aber gar nichts.Geändert von Biergamasda (24.12.08 um 14:43 Uhr)
-
Ich habe dies jetzt mal nachgestellt, und es funktioniert alles einwandfrei.
Ist das Beispiel von dir irgendwo online, um den Fehler dort suchen zu Können?
-
25.12.08 12:25 #5
Habs jetz mal hochgeladen
http://biergamasta.bi.ohost.de/hp
und zum download als rar (sin auch paar php files dabei)
http://biergamasta.bi.ohost.de/hp/hp.rar
Die SQL zugriffe funktioniern nicht, da ich die DB nicht hergerichtet habe, daran solls aber nicht scheitern
mfg
-
funktioniert doch alles 1a
-
26.12.08 09:40 #7
Hmm... bei mir geht auf der Seite nix das mit AJAX zu tun hat....
Wird dann wohl eine andere Ursache haben. Wenn ich draufkomme gebe ich Bescheid woran es gelegen hat
Danke für deine Mühen
mfg
-
26.12.08 10:45 #8
Sorry fürn Doppelpost

Hab jetz noch ein wenig rumprobiert, und bin auf einige Kleinigkeiten draufgekommen.
1. Rechts sollten news drin sein, die wurden nicht angezeigt, weil ich hier (Zeile 4):
Code javascript:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function printNews(httpRequest) { if (httpRequest.readyState == 4) { if (httpRequest.status == 200) { var news = httpRequest.responseText.split(';'); for (i = 0; i < news.length - 1; i++) { div = document.createElement("div"); div.className = "newsTeaser"; div.appendChild(document.createTextNode(news[i].split(".")[0])); div.onclick = new Function('makeRequest("./news/' + news[i]+ '",SHOW_CONTENT)'); document.getElementById("news").appendChild(div); } } else { alert('There was a problem with the request.'); } } }
auf das "var" vergessen habe
Naja, so weit so gut...
Das blöde daran ist nur, dass das mein Problem immer noch nicht behebt. Hab im Windows ein wenig rumexperimentiert, und kann mir mitm IE (6 und 7) alles (bis auf ein paar kleinigkeiten) problemlos ansehen, und die AJAX routinen funktionieren auch.
Wenn ich das Ganze jetzt im Firefox (3.0.5) anschaue, geht das AJAX zeug nicht mehr. Weder im Windows (XP), noch im Linux (Ubuntu 8.1)
Jetzt meine Frage(n):
1. Kann es sein, dass der Firefox 3.0.5 irgendetwas anders interpretiert?
2. Könnte es sein, dass es daran liegt, dass die Files auf einem Linux server liegen? (wobei ich mir das eher nicht vorstellen kann, da es übern IE ja Funktioniert
3. Welchen Browser verwendest du?
Danke nochmal
Geändert von Biergamasda (26.12.08 um 10:48 Uhr)
-
Ui, ich hab jetzt glatt an mir gezweifelt, die Lösung ist recht simpel

Ums kurz zu machen, dein AJAX funktioniert nicht, weil in deinem Code nicht ein Schnipsel AJAX ist
Was bedeutet AJAX?
Asynchronous Javascript and XML
Deine Requests erfolgen jedoch alle synchron.
Was bedeutet synchron?
Das Standardverhalten von JS ist ja, dass es eine Anweisung nach der anderen erledigt.
Also bei dir in der Theorie: Request senden, und wenn das erledigt ist, geht es weiter.
Nur: es scheint so zu sein, dass FF3 währendessen die Vorgänge während des Sendens des Requests ignoriert...die Funktion für den onreadystatechange-Event wird anscheinend nicht aufgerufen, und wenn das Senden erledigt ist, ändert sich ja der readystate nicht mehr.
Die synchrone Vorgehensweise sollte also jene sein:Code :1 2 3
httpRequest.open('GET', url, false); httpRequest.send(''); printContent(httpRequest);
allerdings sind synchrone Sendevorgänge kaum empfehlenswert, denn bis zum Abschluss des Vorgangs ist der Browser auf Eis gelegt.
Lösung: verwende wie üblich asynchrone Request. Du musst dafür nur überall den 3.Parameter bei httpRequest.open() auf true setzen(oder ihn weglassen, denn true ist der Standardwert).
Ansonsten: Hatte es mit allem möglichen getestet, nur nicht mit FF3, weswegen es mir zuerst nicht als Problem begegnete.
-
27.12.08 20:32 #10
hmm, daran hats gelegen
Danke für die Hilfe
Wünsche noch ein schönes WE
mfg
Ähnliche Themen
-
[AJAX] Funktion funktioniert, wird jedoch nicht aufgerufen
Von Milliongame im Forum Javascript & AjaxAntworten: 7Letzter Beitrag: 27.01.09, 19:28 -
JS im return von ajax wird nicht ausgeführt.
Von Nord-Süd-Richtung im Forum Javascript & AjaxAntworten: 8Letzter Beitrag: 05.12.08, 23:43 -
PHP wird nicht richtig ausgeführt
Von freundeder4ringe im Forum PHPAntworten: 6Letzter Beitrag: 20.04.07, 21:26 -
Funktion wird nicht richtig ausgeführt
Von RehW im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 29.06.06, 11:27 -
Linux + php wird nicht richtig ausgeführt.
Von sterndi im Forum Linux & UnixAntworten: 6Letzter Beitrag: 16.04.04, 07:37





Zitieren
Login





