无法从外部嵌套的json文件中获取数据表单jquery

时间:2015-01-31 03:48:10

标签: jquery ajax json

我正在尝试从外部嵌套的json文件中获取数据。 这是我的ajax电话:

 <script>
var json1 = (function () {
  var json1 = null;
  $.ajax({
    'async': false,
    'global': false,
    'url': "PlayerActivity",
    'dataType': "json",
    'success': function (data) {
      json1 = data;
    }
  });
  return json1;
})(); 


var temp1 = [];
$.each(json1,function(i,val){
  player = {};
  player.id = val.id;
  player.Events = val.Events;
  temp1.push(player);
});
  alert(temp1[1].Events); 

  $.each(temp1.Events, function(entryIndex, entry) {
       alert(this.desc); 
    });
</script>

这是我的json格式:

 var data1=   {
"id": "7",
"Events": [
    {
        "id ": "1",
        "desc": "kjbjhsdbjhbzsdj"
    },
    {
        "id ": "2",
        "desc": "kjbjhsdbjhbzsdj"
    },
    {
        "id ": "3",
        "desc": "kjbjhsdbjhbzsdj"
    }
  ]
}

当我做temp [1]时。它显示正确,但是当我做temp [1]。事件时,它显示未定义。我知道我没有定义desc,但我尝试过很多方法:

  player.Events.desc = val.desc
  player.desc = val.desc

etc..etc。但没有任何效果

3 个答案:

答案 0 :(得分:1)

试试这种方式,

player.Events[0].desc

了解更多:https://www.json.com/json-object

答案 1 :(得分:0)

你做错了,因为AJAX调用是异步的,而你是未定义的,因为数据尚未加载。您可以提供对AJAX请求的回调,或者在成功时调用函数。试试这个:

var invokePlayerActivity = function () {
    $.ajax({
        'async': false,
        'global': false,
        'url': "PlayerActivity",
        'dataType': "json",
        'success': function (data) {
            main(data);
        }
    });
}; 

function main (data) {
    var temp1 = [];

    $.each(data, function(i, val){
        player = {};
        player.id = val.id;
        player.Events = val.Events;
        temp1.push(player);
    });

    alert(temp1[1].Events); 

    $.each(temp1.Events, function(entryIndex, entry) {
        alert(this.desc); 
    });
}

invokePlayerActivity();

答案 2 :(得分:0)

只需要使用此

   alert(**player.Events[0].desc**)

而不是

    alert(Events[0].desc)