Alt 11.06.2011, 13:35:23   #1 (permalink)
Erfahrener Benutzer
Benutzerbild von da_freak

ID: 233028
Lose-Remote

Reg: 22.06.2006
Beiträge: 737
da_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblick
Standard Variablenproblem

Hallo,

wahrscheinlich ist das ein ganz simples Problem, aber ich habe keine Ahnung, wonach ich googeln soll um da von selbst drauf zu kommen, zumal da etwas ganz seltsam dran ist. Also erstmal mein Code:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function getQuoteTags(){ ret = ""; $.ajax({ type: "GET", url: "suggestions.php", data: "fn=getQuotes", success: function(msg){ ret = msg; } }); //alert(ret) return ret; } function StateSuggestions() { var tags = getQuoteTags(); this.states = tags.split(","); }
Ich will für eine Autocomplete-Funktionalität (die auch an sich einwandfrei funktioniert), Tags aus der Datenbank laden. Das mache ich hier mit dem JQuery Ajax-Schnipsel. Das funktioniert ebenfalls einwandfrei. Das Problem ist allerdings, dass ich den Inhalt von der msg-variablen in die mir das Ajax Ergebnis geliefert wird, nicht an die aufrufende funktion geliefert bekomme.
Wenn ich jetzt in dem Beispiel, vor dem return ret; das alert(ret); ausführe, bekomme ich zwar ein leeres Alertfenster, aber der String wird einwandfrei zurückgegeben und weiterverarbeitet. Und ich glaube genau das macht mein Problem zu speziell um es zu googeln. Wie gesagt: Vermutlich nur eine Kleinigkeit. Um einen Hinweis oder Hilfestellung wär ich allerdings sehr dankbar!
da_freak ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 11.06.2011, 14:12:11   #2 (permalink)
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose-Remote
Abwesend

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 15.363
Bububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes Ansehen
Standard

Ajax= Asynchrones javascript and XML

dein return ret wird direkt nach dem Ajax-Aufruf durchgeführt, also noch bevor du eine Antwort bekommst.

Demnach mußt du dein

this.states = tags.split(",");

innerhalb des Ajax ausführen, oder dort eine Funktion aufrufen, die das macht.

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function getQuoteTags(){ $.ajax({ type: "GET", url: "suggestions.php", data: "fn=getQuotes", success: function(msg){ doit(msg); } }); } function doit(tags) { this.states = tags.split(","); }
und einfach getQuoteTags() aufrufen.
.DE 1. Jahr 3,95€, 2.Jahr oder Tranfer nur 2,95€! +2 Backlinks je Domain! ab 20 Domains+3 BL/Domain, ab 50 Domains+4BL/Domain!
Angebot mit Backlink (Preise sind dauerhaft gültig!) bis 31.5.2012!! Weitere Preise auf Anfrage
-> PN an Mich
Screenshot machen MammutHaNull Gold verkaufen
Bububoomt ist offline   Mit Zitat antworten
Alt 11.06.2011, 15:17:52   #3 (permalink)
Erfahrener Benutzer
Benutzerbild von da_freak

ID: 233028
Lose-Remote

Reg: 22.06.2006
Beiträge: 737
da_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblick
Standard

Hmmm, das hatte ich auch schon probiert, funktioniert allerdings auch nicht.

Ich habe folgendes Tutorial benutzt: http://www.webreference.com/programm...t/ncz/column2/

Beispielseite:
http://www.webreference.com/programm.../example2.html

Code:
http://www.webreference.com/programm...utosuggest2.js

http://www.webreference.com/programm...uggestions2.js

Um die datei suggestions2.js gehts hier quasi. In dem Beispiel wird das array in der function erzeugt. In der Seite, in der der Autosuggester dann auf die entsprechende input-box losgelassen wird, wird übrigens folgendes JS ausgeführt:

Code:
1:
2:
3:
4:
5:
<script type="text/javascript"> window.onload = function () { var oTextbox = new AutoSuggestControl(document.getElementById("txt1"), new StateSuggestions()); } </script>
Liegt es vielleicht daran, dass mit this.states durch das erzeugen eines Objekts mit new StateSuggestions nur innerhalb dieses Objekts sprich hier:

Code:
1:
2:
3:
function StateSuggestions() { ... }
gearbeitet weden kann?
da_freak ist offline Threadstarter   Mit Zitat antworten
Alt 12.06.2011, 02:30:52   #4 (permalink)
Erfahrener Benutzer
Benutzerbild von da_freak

ID: 233028
Lose-Remote

Reg: 22.06.2006
Beiträge: 737
da_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblick
Standard

Ich hab die Lösung gefunden:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function getQuoteTags(obj){ $.ajax({ type: "GET", url: "suggestions.php", data: "fn=getQuotes", success: function(msg){ obj.states = msg.split(","); //<--- } }); } function StateSuggestions() { getQuoteTags(this); //<--- alert(this.states.length); }

Aber was mich immer noch stutzig macht, ist die Tatsache, dass ich (siehe 1. post) die Variable korrekt zurückgeben kann, wenn ich vorher ein alert(ret) mache
da_freak ist offline Threadstarter   Mit Zitat antworten
Alt 12.06.2011, 06:50:40   #5 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Syntaktisch ist die Variable ja vorher definiert.
Praktisch hast du lediglich Glück, wenn du das Ergebnis da schon hast.

Bau mal n Sleep vor dem Setzen von ret im AJAX-Return ein, dann merkst du, dass ret immer noch leer is, du den Leerstring zurückgibst und ne halbe Minute später erst vom AJAX-Return gesetzt wird.
theHacker ist offline   Mit Zitat antworten
Alt 13.06.2011, 01:08:38   #6 (permalink)
Erfahrener Benutzer
Benutzerbild von da_freak

ID: 233028
Lose-Remote

Reg: 22.06.2006
Beiträge: 737
da_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblick
Standard

Ich bin jetzt einigermaßen durchgestiegen. Mit Glück hat das glaub ich weniger zu tun, weil das reproduzierbar ist. Durch die asynchronität läuft der AJAX teil wohl immer weiter und scheinbar bricht ein alert(); das ab und die Variablen werden gesetzt. Das kann man aber folgendermaßen vermeiden: async: false,
da_freak ist offline Threadstarter   Mit Zitat antworten
Alt 13.06.2011, 07:42:12   #7 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von da_freak Beitrag anzeigen
Das kann man aber folgendermaßen vermeiden: async: false,
Dann isses aber kein AJAX mehr - was es absurd macht, das zu machen
theHacker ist offline   Mit Zitat antworten
Alt 13.06.2011, 08:20:20   #8 (permalink)
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose-Remote
Abwesend

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 15.363
Bububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes Ansehen
Standard

Und was den Browser (soweit ich das weiß) auch lahmlegen kann. Zumindest wird beim Dojotoolkit davor gewarnt das zu nutzen.
.DE 1. Jahr 3,95€, 2.Jahr oder Tranfer nur 2,95€! +2 Backlinks je Domain! ab 20 Domains+3 BL/Domain, ab 50 Domains+4BL/Domain!
Angebot mit Backlink (Preise sind dauerhaft gültig!) bis 31.5.2012!! Weitere Preise auf Anfrage
-> PN an Mich
Screenshot machen MammutHaNull Gold verkaufen
Bububoomt ist offline   Mit Zitat antworten
Alt 13.06.2011, 08:31:15   #9 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Firefox erkennt Scripte, die nicht mehr reagieren, warnt mich und gibt mir die Möglichkeit, die abzubrechen. Wenn dieses Dialogfenster aber einmal auf einer Webseite aufgeht, @da_freak, sei versichert, dass ich dann diese Seite nie wieder besuche

Sinn von AJAX ist ja, dass es eben AJAX is.

AJAX-Programmierung hat dieselben Tücken wie multi-threaded-Programmierung: Jeder AJAX-Request ist wie ein neuer Thread zu behandeln. Man weiß nie, wann er fertig wird. Du musst damit die Anwendung so schreiben, dass auch ohne seine Rückkehr sie korrekt funktioniert.
theHacker ist offline   Mit Zitat antworten
Alt 13.06.2011, 08:51:37   #10 (permalink)
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose-Remote
Abwesend

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 15.363
Bububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes Ansehen
Standard

Aber ob das immer klappt? Bzw. wie schnell FF das meldet...
Die Frage ist ja ab wann er meint, das ein Script nicht läuft.

Habe mal getestet und in den Openlayers (sowas wie google Maps) 10k Elemente gefügt, die per Ajax kamen. Chrome hats in paar Sek. geschafft, FF hat ~30 Sek. gebraucht, Ie hats gar nicht gepakt. Beim FF kam aber keine Meldung obwohl ich nichts machen konnte. Wohl weil das Script ja gearbeitet hat.
.DE 1. Jahr 3,95€, 2.Jahr oder Tranfer nur 2,95€! +2 Backlinks je Domain! ab 20 Domains+3 BL/Domain, ab 50 Domains+4BL/Domain!
Angebot mit Backlink (Preise sind dauerhaft gültig!) bis 31.5.2012!! Weitere Preise auf Anfrage
-> PN an Mich
Screenshot machen MammutHaNull Gold verkaufen
Bububoomt ist offline   Mit Zitat antworten
Alt 13.06.2011, 08:56:40   #11 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

Zitat:
Zitat von Bububoomt Beitrag anzeigen
Habe mal getestet und in den Openlayers (sowas wie google Maps) 10k Elemente gefügt, die per Ajax kamen.
10k? Is ja gar nix Ich hab für meine Diplomarbeit schon n paar Stück mehr gehabt. Allerdings hab ich nicht per AJAX laden lassen, sondern eben n viele-MB-dickes HTML-Dokument mit 99,999% JavaScript gehabt

Firefox hat mir mehrfach - jeweils nach ner gefühlten halben Minute - dann diese Warnung gezeigt. Ich hab das Script da natürlich nicht beendet, weil ich es ja kannte und wusste, dass es irgendwann fertig wird.

Wenn Firefox mit einem sychronen AJAX-Request nicht mehr reagiert, die Warnung aber nicht zeigt, klingt mir das nach einem Bug in Firefox.
theHacker ist offline   Mit Zitat antworten
Alt 13.06.2011, 11:16:42   #12 (permalink)
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose-Remote
Abwesend

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 15.363
Bububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes Ansehen
Standard

Du hast mehr als 10k Marker in Openlayers auf einmal eingefügt?
.DE 1. Jahr 3,95€, 2.Jahr oder Tranfer nur 2,95€! +2 Backlinks je Domain! ab 20 Domains+3 BL/Domain, ab 50 Domains+4BL/Domain!
Angebot mit Backlink (Preise sind dauerhaft gültig!) bis 31.5.2012!! Weitere Preise auf Anfrage
-> PN an Mich
Screenshot machen MammutHaNull Gold verkaufen
Bububoomt ist offline   Mit Zitat antworten
Alt 13.06.2011, 12:06:41   #13 (permalink)
bekämpft die Mächte des Bösen
Benutzerbild von theHacker

ID: 69505
Lose-Remote

theHacker eine Nachricht über ICQ schicken theHacker eine Nachricht über AIM schicken theHacker eine Nachricht über MSN schicken theHacker eine Nachricht über Yahoo! schicken theHacker eine Nachricht über Skype™ schicken
Reg: 20.04.2006
Beiträge: 20.469
theHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes AnsehentheHacker genießt hohes Ansehen
Standard

817.246, um genau zu sein *eben nachgeguckt*
theHacker ist offline   Mit Zitat antworten
Alt 13.06.2011, 12:39:41   #14 (permalink)
ohne Vertrauen
Benutzerbild von Bububoomt

ID: 10361
Lose-Remote
Abwesend

Bububoomt eine Nachricht über ICQ schicken
Reg: 28.04.2006
Beiträge: 15.363
Bububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes AnsehenBububoomt genießt hohes Ansehen
Standard

wieso?
Meine 10k POI waren schon einfach "to much" und unnütz...
.DE 1. Jahr 3,95€, 2.Jahr oder Tranfer nur 2,95€! +2 Backlinks je Domain! ab 20 Domains+3 BL/Domain, ab 50 Domains+4BL/Domain!
Angebot mit Backlink (Preise sind dauerhaft gültig!) bis 31.5.2012!! Weitere Preise auf Anfrage
-> PN an Mich
Screenshot machen MammutHaNull Gold verkaufen
Bububoomt ist offline   Mit Zitat antworten
Alt 13.06.2011, 12:47:25   #15 (permalink)
Erfahrener Benutzer
Benutzerbild von da_freak

ID: 233028
Lose-Remote

Reg: 22.06.2006
Beiträge: 737
da_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblickda_freak ist ein wunderbarer Anblick
Standard

danke für den Einwand, tH. Ich hab das async:false; wieder rausgenommen und das mit einem Aufruf an eine Funktion außerhalb des requests gemacht, so wie es Bububoomt schon vorgeschlagen hat. Keine Ahnung warum das nicht funktioniert hatte, entweder nicht zu Ende gedacht oder von mir falsch umgesetzt. Mittlerweile geht's auch damit.
da_freak ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45:57 Uhr.