JavaScript 异步问题

标签 javascript jquery

这是一个 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/

相关文章:

c# - 在 asp.net 中使用 dropzone.js

php - 如何在此代码 php 中的单词之间放置 '-'?

javascript - 如何在按住按钮时循环播放音频片段?

javascript - 有条件地在 Controller 中接收同步或异步对象( Angular 、 ionic )

javascript - 将更多数据与选择选项关联而不仅仅是 "value"的正确方法是什么

javascript - D3Plus header 修改

java - 无法使用 javascript 提交()接缝表单

javascript - 将 Flash 视频输出捕获到 mp4 文件的脚本方式?

javascript - 使用 .on 获取原始元素

jquery - 在 qUnit 中测试整个页面重定向