Javascript 使用JQuery.getJSON读取数组
我正在尝试使用JQuery的ajax方法从JSON文件获取数组。具体来说,我希望在加载文档时发出ajax请求,并在其他函数中使用获取的数据。 这是我的密码: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
$(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中使用的。