我想根据多个ajax/json请求的结果更新页面.使用jQuery,我可以"链接"回调,就像下面这个非常简单的简化示例:

$.getJSON("/values/1", function(data) {
  // data = {value: 1}
  var value_1 = data.value;

  $.getJSON("/values/2", function(data) {
    // data = {value: 42}
    var value_2 = data.value;

    var sum = value_1 + value_2;

    $('#mynode').html(sum);
  });

});

然而,这会导致连续发出请求.我更希望有一种并行请求的方式,并在所有请求完成后执行页面更新.有什么办法吗?

推荐答案

Try this solution, which can support any specific number of parallel queries:

var done = 4; // number of total requests
var sum = 0;

/* Normal loops don't create a new scope */
$([1,2,3,4,5]).each(function() {
  var number = this;
  $.getJSON("/values/" + number, function(data) {
    sum += data.value;
    done -= 1;
    if(done == 0) $("#mynode").html(sum);
  });
});

Jquery相关问答推荐

如何在html css中制作响应表

如何定位 prism.js 脚本中包含的代码?

通过 jQuery 提取 application/json 数据

jQuery单击/切换两个功能

如何使用 jQuery 禁用粘贴(Ctrl+V)?

输入类型=文件的jQuery更改方法

使用 jQuery 按文本内容 Select 选项

我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?

显示的 jQuery 日期 Select 器年份

为什么 jquery fadeIn() 不能与 .html() 一起使用?

JSON 到字符串变量转储

将数据传递给 jQuery UI 对话框

如何从表格单元格 (td) 中获取相应的表格标题 (th)?

验证外部脚本是否已加载

Javascript 使用哈希值重新加载页面

检测夹点的最简单方法

jQuery - 确定输入元素是文本框还是 Select 列表

变量首字母大写

将十六进制转换为 RGBA

为什么我应该创建异步 WebAPI 操作而不是同步操作?