gpt4 book ai didi

jquery - 获取多个ajax请求的总数

转载 作者:行者123 更新时间:2023-12-01 06:39:26 26 4
gpt4 key购买 nike

我正在尝试从多个ajax请求的返回中获取总计,我现在使用同步来使其工作,因为我认为这将是一个更好的解决方案。

这是我的咖啡

get_total = (trend, duration) ->
total = 0
for keyword in trend.search_terms
url = "http://otter.topsy.com/search.json?q=#{keyword}&window=#{duration}"
$.ajax
url: url
async: false
success: (data) ->
total += data.response.total
total

编译得很好

  get_total = function(trend, duration) {
var keyword, total, url, _i, _len, _ref;
total = 0;
_ref = trend.search_terms;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
keyword = _ref[_i];
url = "http://otter.topsy.com/search.json?q=" + keyword + "&window=" + duration;
$.ajax({
url: url,
async: false,
success: function(data) {
return total += data.response.total;
}
});
}
return total;
};

有没有一种方法可以在不使用同步js的情况下完成全部工作。

我一直在尝试 $.when().then() 但当请求的大小是动态时它会导致问题。

最佳答案

我不了解 CoffeeScript,所以这里是一个纯 jQuery 解决方案:

如果不进行同步调用,则无法从 get_total 返回值。您可以做的就是在所有请求完成后调用回调。

此示例使用 jQuery 的 Deferred objects [docs] :

function get_total(trend, duration, callback) {
var deferreds = [], total = 0;

for(var i = 0, l = trend.search_terms.length; i < l; i++) {
deferreds.push($.get("http://otter.topsy.com/search.json?q=" + trend.search_terms[i] + "&window=" + duration, function(data) {
total += data.response.total;
}));
}

$.when.apply($, deferreds).then(function() {
callback(total);
});
}

用法:

get_total(trend, 200, function(total) {
// now execute the code that needs `total`
});

如果您需要 get_total 返回值,那么您必须进行同步调用。一般来说,这是一个坏主意,特别是当您发出多个请求时。它将卡住浏览器的 UI。最好重构代码以使用回调。

更新:我刚刚阅读了您问题的最后一句话。您可以使用 .apply() [MDN] 将动态数量的参数传递给函数.

更新2:当然,如果您可以控制该服务,则应该使其接受多个关键字以避免多个 Ajax 请求。

关于jquery - 获取多个ajax请求的总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com