2016-06-27 6 views
0

Ich brauche die Sprachen von Array Lenguajes [] von JSON und speichern in einer "custom_lenguajes" Variable, aber ich bekomme nicht.Fügen Sie Werte aus der JSON-Ausgabe in eine JavaScript-Variable ein, scheitern bei Loop oder Async?

JSON Ausgabe:

{ 
- data: 
[ 
- { 
    DT_RowId: "row_93", 
    idiomas: "Si", 
    site: "342800010", 
    lenguajes: 
    [ 
    - { 
     id: "3", 
     code: "nl" 
     }, 
    - { 
     id: "5", 
     code: "ja" 
     }, 
    - { 
     id: "17", 
     code: "de" 
     }, 
    - { 
     id: "19", 
     code: "en" 
     }, 
    - { 
     id: "38", 
     code: "ru" 
     } 
    ] 
    } 
], 
    options: 
{}, 
    files: [ ] 
} 

JS-Code:

var custom_lenguajes =""; 
$(document).on('pageinit', '#page-1', function() { 
// get lenguajes. START 
     $.getJSON(parser_origin + "/_country/spain/v134/lacarte.restaurants.front/alacarte/php/languages.front.php", { site: id_establecimiento()}, function(data){ 
    for (var i=0, len=data.length; i < len; i++) { 
     console.log(data[i]); 
    } 
    data = data['data']; 
    data3 = data; 
}); 

    // I need create a variable that acummulate languages from JSON, this way: "nl,ja,de,en,ru" 
     $.each(data3, function(entryIndex, entry) { 
      $.each(this.lenguajes, function() { 
       alert(this.code); // don't show nothing. ONLY TEST 
        custom_lenguajes += this.code + "\,"; 
        console.log(custom_lenguajes); //show "". ONLY TEST 
      }); 
      });    

// get lenguajes. END 
... 

Für Ihre Hilfe:

  • wenn ich console.log (data3); (auf meinem Code) Ich kann ein leeres Objekt "[]" auf der Konsole zu sehen, beim Laden der Seite
  • Nach, (wenn die Seite geladen ist), wenn ich auf der Konsole schreiben chrome: data3 [0] .enguajes [0 ] .code, es zeigt mir "nl". Bei der Chrome-Konsole funktioniert es, aber nicht bei meinem Code.

Was ist falsch? Ist ein Problem mit meiner Schleife oder mit ASYNC?

Jede Hilfe ist willkommen! Danke !!

+0

setzen Sie das 'each' in das' getJSON'. – BenG

Antwort

1

Javascript ist asynchron, was bedeutet, dass es nicht auf Ihre Ajax $.getJson() Funktion warten wird, bevor Sie versuchen, in die $.each() Schleife zu gehen. Versuchen Sie, Ihre Schleife innerhalb der $.getJson() Funktion zu setzen.

var custom_lenguajes =""; 
$(document).on('pageinit', '#page-1', function() { 
    // get lenguajes. START 
    $.getJSON(parser_origin + "/_country/spain/v134/lacarte.restaurants.front/alacarte/php/languages.front.php", { site: id_establecimiento()}, function(data){ 
     for (var i=0, len=data.length; i < len; i++) { 
      console.log(data[i]); 
     } 
     data = data['data']; 
     data3 = data; 

     $.each(data3, function(entryIndex, entry) { 
      $.each(this.lenguajes, function() { 
       alert(this.code); // don't show nothing. ONLY TEST 
       custom_lenguajes += this.code + "\,"; 
       console.log(custom_lenguajes); //show "". ONLY TEST 
      }); 
     }); 
    }); 
}); 
0

danke für Ihre Hilfe.

Ja, Ihre Kommentare sind in eine gute Richtung (Schleifen innerhalb $ .getJSON), jetzt funktioniert es !! Der letzte Code, der funktioniert:

$.getJSON(parser_origin + "/_country/spain/v134/lacarte.restaurants.front/alacarte/php/languages.front.php", { site: id_establecimiento()}, function(data){ 
    for (var i=0, len=data.length; i < len; i++) { 
     console.log(data[i]); 
    } 
    data = data['data']; 
    data3 = data; 

    // I need create a variable that acummulate languages from JSON: "nl,ja,de,en,ru" 
     $.each(data3, function(entryIndex, entry) { 
      $.each(this.lenguajes, function() { 
       //alert(this.code); // ONLY TEST 
        custom_lenguajes += this.code + "\,"; 
        //console.log(custom_lenguajes); //ONLY TEST 
      }); 
      }); 
});// end $.getJSON