这是一个 JavaScript 新手问题,但我不太确定如何通过 google 寻求帮助,因为我不确定如何以简单的方式描述问题。
我有一个很大的、有些复杂的 JSON,我需要对其进行操作,以便我可以通过某种方式 reshape JSON,从而获得仅包含国家/地区、城市和销售额的列表。
JSON 本身对我来说不是问题,这是我收到它后想要用它做的事情。基本上,我想从接收到的大型 JSON 创建 3 个单独的对象/数组,并让这 3 个单独的对象/数组可在 $.ajax
调用外部使用。是的,我认为我可以在 $.ajax
成功回调中完成所有这些操作,但我宁愿在其他地方完成所有 JSON 处理。我的伪 JavaScript 看起来像这样:
var model = {
countries: [],
cities: [],
sales: [],
set: function(data) {
//manipulate data here so that model.countries, model.cities, model.sales are populated
}
};
$.ajax({
url: 'example.com/sample.json',
success: function(data) {
model.set(data); //is this the right way to do this?
}
});
$('#countries').html(model.countries);
$('#cities').html(model.cities);
$('#sales').html(model.sales);
但是由于 JavaScript 是异步执行的,最后 3 行始终为空,因为尚未收到 JSON。
所以我想我的问题是,如何将收到的 JSON 结果绑定(bind)到 $.ajax
范围之外的变量,以便我可以在页面上的任何位置使用它?
最佳答案
简单的解决方案是这样的:
$.ajax({
url: 'example.com/sample.json',
success: function(data) {
model.set(data);
$('#countries').html(model.countries);
$('#cities').html(model.cities);
$('#sales').html(model.sales);
}
});
如果你想要更多框架性的东西,那么你可以看看类似 Backbone.js 的东西。 .
关于JavaScript 异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13338319/