在JavaScript变量上添加JSON输出的值,在循环或异步上失败

Add values from JSON output on JavaScript variable, fail on Loop or Async?

本文关键字:失败 循环 异步 输出 JavaScript 变量 添加 JSON      更新时间:2023-09-26

我需要从JSON中获取数组lenguajes[]的语言并存储在"custom_lenguajes"变量中,但我没有得到。

JSON输出:

{
-   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代码:

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
...

For your help:

  • 如果我使用console.log(data3);(在我的代码)我可以看到一个空对象"[]"控制台chrome,当加载页面
  • 之后,(当页面加载时),如果我在控制台chrome上写:data3[0].lenguajes[0]。代码,显示的是"n "在chrome控制台看它的工作,但不是我的代码。

你做错了什么?是一个问题与我的循环或ASYNC?

欢迎任何帮助!谢谢你! !

Javascript是异步的,这意味着它不会等待您的ajax $.getJson()函数在尝试进入$.each()循环之前完成。试着把你的循环放到$.getJson()函数里面。

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
             }); 
        });   
     });
});

谢谢你的帮助。

是的,你的注释方向很好($.getJSON内的循环),现在它工作了!!最终有效的代码:

    $.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