Javascript 使用JQuery.getJSON读取数组

Javascript 使用JQuery.getJSON读取数组,javascript,jquery,json,Javascript,Jquery,Json,我正在尝试使用JQuery的ajax方法从JSON文件获取数组。具体来说,我希望在加载文档时发出ajax请求,并在其他函数中使用获取的数据。 这是我的密码: $(document).ready(function() { getJSON(); clickEvents(); }); function getJSON() { $.getJSON('goods.js', function(data) { crazyFun(data.Goods); addScores(data.kar

我正在尝试使用JQuery的ajax方法从JSON文件获取数组。具体来说,我希望在加载文档时发出ajax请求,并在其他函数中使用获取的数据。 这是我的密码:

$(document).ready(function() {
  getJSON();
  clickEvents();
});
function getJSON() {


$.getJSON('goods.js', function(data) {
  crazyFun(data.Goods);
  addScores(data.karma);
 });
}
}
function addScores(karma) {
 $('#karmaYinYangScore').append(karma[0].karmaYinYangScore);
 $('#KarmaGiveScore').append(karma[0].KarmaGiveScore);
 $('#KarmaTakeScore').append(karma[0].KarmaTakeScore);
 $('#ItemsGiveScore').append(karma[0].ItemsGiveScore);
 $('#ItemsTakeScore').append(karma[0].ItemsTakeScore);
}
function crazyFun(Goods) {
for (var i = 0; i < Goods.length; i++) {
        var alpha= $('#template').clone();
        alpha.removeAttr('id');
        alpha.find('div.picture').attr('id', Goods[i].picture);
        alpha.find('h2').html(Goods[i].header);
        alpha.find('p').html(Goods[i].text);
        alpha.find('div.notification').attr('id', Goods[i].notification);
        $('#repeater').append(alpha);
}

}

根据jQuery关于getJSON函数()的文档,您的回调参数似乎有误导性。你的回电

function(Goods, karma) {
    crazyFun(Goods);
    addScores(karma);
}
…似乎期望数据数组自动传递给它,但jQuery实际上将整个JSON结果作为第一个参数传递,将请求的状态作为第二个参数传递,而不管JSON是如何构造的。您的回调可能更像这样:

function(json, status) {
    crazyFun(json.Goods);
    addScores(json.karma);
}
{
 karma: [{
          karmaYinYangScore:'some value',
          KarmaGiveScore:'some value',
          KarmaTakeScore:'some value',
          ItemsGiveScore:'some value',
          ItemsTakeScore:'some value'
         }
        ],
 Goods: ['more','array','values']
}

这假设您的JSON格式良好,“Goods”和“karma”属性是根对象的属性。如果JSON的结构不同,您可能需要修改回调。

我只能猜测您的数据是什么样子,但既然您说过“karma and Goods是数组的名称”,我就假设我们讨论的是这样的内容:

function(json, status) {
    crazyFun(json.Goods);
    addScores(json.karma);
}
{
 karma: [{
          karmaYinYangScore:'some value',
          KarmaGiveScore:'some value',
          KarmaTakeScore:'some value',
          ItemsGiveScore:'some value',
          ItemsTakeScore:'some value'
         }
        ],
 Goods: ['more','array','values']
}
如果是这样的话,我们在您的代码中有一些问题

首先,getJSON返回一个数据结果,所以您应该只引用返回的数据

function getJSON() {
$.getJSON('goods.js', function( data ) {
    crazyFun( data.Goods ); // reference Goods array from data response
    addScores( data.karma );  // reference karma array from data response
    });
}
然后,您的
.addScores()
函数不接受参数。您需要一些引用来接收正在传递的数组

  // Reference to the array being passed to the function
  //   ---------------v
function addScores( karma ) {
    $('#karmaYinYangScore').append(karma[0].karmaYinYangScore);
    $('#KarmaGiveScore').append(karma[0].KarmaGiveScore);
    $('#KarmaTakeScore').append(karma[0].KarmaTakeScore);
    $('#ItemsGiveScore').append(karma[0].ItemsGiveScore);
    $('#ItemsTakeScore').append(karma[0].ItemsTakeScore);
}

这些是我看到的唯一错误。除此之外,解决方案取决于响应的实际数据结构。

您的JSON文件是什么样的?你有什么问题?回调函数的定义是错误的,但是没有看到JSON,就没有什么可说的了。JSON的结构很好。当我在html文件中调用JSON时,一切都正常。这并不重要。为了帮助你,我们需要知道它是什么样子。好的,谢谢。如果这是
goods.js
,则此文件不是JSON文件。它是JavaScript。如果您想使用
getJSON
,此文件需要包含一个JSON字符串,如
{“karma”:[…],“goods”:[…]}
谢谢您的帮助。我还是不能让它工作。。。我假设我不需要在HTML中引用JSON文件,对吗?我已经更新了代码,以反映您在我的原始帖子中的建议。@fordays-不,您不需要。但是,如果您在问题中发布的响应是收到的实际响应,那么它将失败,因为JSON数据不能以
var karma=
开头。您应该完全取消变量赋值。但还有一件事。
货物
数据在哪里?还有
crazyFun()
函数在哪里?我添加了我所有的代码。在我的Safari调试控制台中,Goods.js文件显示在Elements部分,因此肯定会调用它,但它看起来不像是在函数crazyFun和addScores中使用的。