Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
536
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von RipmaV
    RipmaV RipmaV ist offline Mitglied Bronze
    Registriert seit
    Jun 2004
    Ort
    Deutschland(Hamburg)
    Beiträge
    35
    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------

  2. #2
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist gerade online mag Cookies & Kekse
    tutorials.de Premium-User
    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.

  3. #3
    Avatar von RipmaV
    RipmaV RipmaV ist offline Mitglied Bronze
    Registriert seit
    Jun 2004
    Ort
    Deutschland(Hamburg)
    Beiträge
    35
    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------

  4. #4
    Quaese Quaese ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Feb 2004
    Beiträge
    3.439
    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
    Quaese
     
    Vielleicht 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

  5. #5
    Avatar von RipmaV
    RipmaV RipmaV ist offline Mitglied Bronze
    Registriert seit
    Jun 2004
    Ort
    Deutschland(Hamburg)
    Beiträge
    35
    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------

  6. #6
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Beiträge
    730
    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:
    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);
    });
    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.

    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.

  7. #7
    Avatar von RipmaV
    RipmaV RipmaV ist offline Mitglied Bronze
    Registriert seit
    Jun 2004
    Ort
    Deutschland(Hamburg)
    Beiträge
    35
    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------

  8. #8
    Avatar von rd4eva
    rd4eva rd4eva ist offline Mitglied Platin
    Registriert seit
    Feb 2003
    Beiträge
    730
    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.

  9. #9
    Avatar von RipmaV
    RipmaV RipmaV ist offline Mitglied Bronze
    Registriert seit
    Jun 2004
    Ort
    Deutschland(Hamburg)
    Beiträge
    35
    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

  1. Frage zu jquery?
    Von Maik20 im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 21.11.10, 17:56
  2. [jQuery] Selector Frage
    Von Microhome im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 12.07.10, 18:33
  3. JQuery Frage beim Toggeln
    Von Oetzicool im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 28.01.10, 23:49
  4. Frage zu jQuery toggle effekt
    Von louS im Forum Javascript & Ajax
    Antworten: 5
    Letzter Beitrag: 03.10.09, 17:28
  5. jQuery - Frage zu Lizenz
    Von AtotheZ im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 26.01.09, 06:02