ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
536
536
EMPFEHLEN
-
07.09.10 12:56 #1
Folgenden Code habe ich um eine XML Datei aus zu lesen und ein zufälliges Element im Dokument an zu zeigen, was auch funktioniert.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
$(document).ready(function(){ var textarray = new Array(); var zaehler = 0; var zufall = 0; $.get('content/didyouknow.xml',function(d){ $(d).find('item').each(function(){ var $duk = $(this); var text = $duk.find('text').text(); text = text.replace("[i]","<i>"); text = text.replace("[/i]","</i>"); textarray[zaehler] = text; zaehler++; }); var anzahl = parseInt(textarray.length); zufall = parseInt(Math.random()*(anzahl)); $('#binfo_wusstestdu_text').html(textarray[zufall]); }); });
Nun ist meine Frage hier zu, wieso ist das textarray nach der Ausführung von $.get wieder leer obwohl ich das Array vor dem auslesen der XML erzeuge?
Und wie kann ich dafür sorgen dass der Inhalt des Arrays auch danach noch vorhanden ist?
Gruß und Dank
RipmaV-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d--(-)@?>+ s: a? C++(+)>+++ !UL P L++ E? W+++ N- o-- K--? w O-- M- V- PS PE- Y+ PGP++ t+ 5 X R+ tv++ b+++ DI+ D- G e+ h r++ y+++
------END GEEK CODE BLOCK------
-
07.09.10 17:57 #2
- Registriert seit
- May 2007
- Ort
- Dresden (Sachsen)
- Beiträge
- 1.458
Das Sprachkonstrukt var bewirkt, dass eine Variable, welche außerhalb einer Funktion gesetzt wurde, global verfügbar ist. In einer Funktion hingegen bewirkt es genau das Gegenteil: die Variable ist versteckt. Entferne es mal und schau, was passiert. Anders kann ich es mir nicht erklären.
Ich mag:- positive Bewertungen meiner Beiträge
- ein Danke für meine hilfreichen Beiträge
Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX
... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.
-
08.09.10 12:14 #3
Wenn ich die variablen außerhalb, und somit global setzte, sind diese nach dem Durchlauf von $.get wieder leer.
Überprüft habe ich es indem ich textarray, zufall und zaehler außerhalb der funktion positioniert habe und dann nach dem "$.get ein console.log(textarray[zufall]) ;" eingefügt habe und die konsole sagt mir immer "undefined".
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
var textarray = new Array(); var zaehler = 0; var zufall = 0; $(document).ready(function(){ $.get('content/didyouknow.xml',function(d){ $(d).find('item').each(function(){ var $duk = $(this); var text = $duk.find('text').text(); text = text.replace("[i]","<i>"); text = text.replace("[/i]","</i>"); textarray[zaehler] = text; zaehler++; }); var anzahl = parseInt(textarray.length); zufall = parseInt(Math.random()*(anzahl)); $('#binfo_wusstestdu_text').html(textarray[zufall]); }); console.log(textarray[zufall]); });-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d--(-)@?>+ s: a? C++(+)>+++ !UL P L++ E? W+++ N- o-- K--? w O-- M- V- PS PE- Y+ PGP++ t+ 5 X R+ tv++ b+++ DI+ D- G e+ h r++ y+++
------END GEEK CODE BLOCK------
-
Hi,
am Script liegt es nicht - zumindest entdecke ich keinen Fehler.
Stimmt der Pfad?
Lieferst du wohlgeformtes (valides) XML aus?
Weiterhin kann es sein bzw. wird es wohl so sein, dass zu dem Zeitpunkt, an dem du auf das Array (textarray) zugreifen möchtest, der asynchrone Request noch nicht abgeschlossen ist. Damit existiert die Variable zufall sowie das gefüllte Array noch nicht.
Um sicher zu stellen, dass der Request abgeschlossen ist, ehe du mit dessen Ergebnissen weiterarbeitest, solltest du die callback-Funktion nutzen bzw. aus ihr heraus die Folgefunktionen aufrufen.
Ciao
QuaeseVielleicht muss man manchmal vom Weg abkommen, um nicht auf der Strecke zu bleiben!
----
Der "Fortsetzungsroman" auf www.leuteforum.de
New kind to realize large scalable projects with jQuery: jQuery SDK
-
08.09.10 17:50 #5
Ja der Pfad stimmt, er läd ja auch das XML. Nur ist das "textarray", sobald der $.get Aufruf vorbei ist wieder leer.
Das hier funktioniert ja soweit; er zeigt den Inhalt auf er Webseite an:
Code :1
$('#binfo_wusstestdu_text').html(textarray[zufall]);
Nur würde ich "textarray" auch gern weiter verwenden und kein neues Request senden für eine weitere Funktion (die ich noch nicht geschrieben habe da mir dafür der Inhalt von "textarray" und "zufall" zur Verfügung stehen müsste, außerhalb des Ajax-Requests).-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d--(-)@?>+ s: a? C++(+)>+++ !UL P L++ E? W+++ N- o-- K--? w O-- M- V- PS PE- Y+ PGP++ t+ 5 X R+ tv++ b+++ DI+ D- G e+ h r++ y+++
------END GEEK CODE BLOCK------
-
Quaese hat dir die richtige Antwrt eigentlich bereits gegeben. Dein console.log steht ausserhalb des get Requests und wird schon ausgeführt bevor der Request abgeschlossen ist.
Als Beispiel:
Das wird sofort nach dem Klick auf #btn ein alert mit false ausgeben und erst wenn der Request abgeschlossen ist erscheint noch ein alert mit true.Code javascript:1 2 3 4 5 6 7 8
$('#btn').click(function(){ var getCallIsReady = false; $.get('url',function(data){ getCallIsReady = true; alert(getCallIsReady); }); alert(getCallIsReady); });
Und hier hab ich noch schnell ein Beispiel zusammen gekritzelt wie du es machen könntest:
http://jsfiddle.net/WXQfA/In order to understand recursion, one must first understand recursion.
-
09.09.10 11:37 #7
Und wie kann ich die Daten, die der Ajax Aufruf läd, auch global zur Verfügung stellen, oder geht so etwas nicht?
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d--(-)@?>+ s: a? C++(+)>+++ !UL P L++ E? W+++ N- o-- K--? w O-- M- V- PS PE- Y+ PGP++ t+ 5 X R+ tv++ b+++ DI+ D- G e+ h r++ y+++
------END GEEK CODE BLOCK------
-
In dem Beispiel sind die Daten doch global verfügbar.
Die Frage ist nur wann du sie ansprichst. Das darf halt erst passieren wenn der Request abgeschlossen ist.In order to understand recursion, one must first understand recursion.
-
10.09.10 12:41 #9
Ach ok ja ich stand da irgendwie auf 'nem Schlauch. Nu hab ichs verstanden.
Danke für die Hilfe!-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d--(-)@?>+ s: a? C++(+)>+++ !UL P L++ E? W+++ N- o-- K--? w O-- M- V- PS PE- Y+ PGP++ t+ 5 X R+ tv++ b+++ DI+ D- G e+ h r++ y+++
------END GEEK CODE BLOCK------
Ähnliche Themen
-
Frage zu jquery?
Von Maik20 im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 21.11.10, 17:56 -
[jQuery] Selector Frage
Von Microhome im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 12.07.10, 18:33 -
JQuery Frage beim Toggeln
Von Oetzicool im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 28.01.10, 23:49 -
Frage zu jQuery toggle effekt
Von louS im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 03.10.09, 17:28 -
jQuery - Frage zu Lizenz
Von AtotheZ im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 26.01.09, 06:02





Zitieren


Login




