gpt4 book ai didi

javascript - 从 ajax 调用内部将变量传递给函数

转载 作者:行者123 更新时间:2023-11-28 19:40:50 25 4
gpt4 key购买 nike

我尝试使用这个循环来读取一些网址来读取它们的修改时间:

var arr = [];

//... fill arr with push

for (var e in arr) {
nodename=arr[e].hostname;
node_json="/nodes/"+nodename;
html +='<a href="'+node_json+'" target="_blank" id="host_'+nodename+'">data</a>';

xhr = $.ajax({
url: node_json,
success: (function(nn) {
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
})(nodename)
});

这已经有点工作了,我注释掉了 success 行:我得到了对所有节点文件的调用,并且在 Firebug 中,我可以在调用的 header 中看到不同的修改时间。

起初我有一个闭包,(参见 How to generate event handlers with loop in Javascript? )我只修改了最后一行的所有结果。这就是为什么我尝试将操作放在单独的函数中。

但是这给出了:

ReferenceError: xhr is not defined
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified")...

如何让 xhr 进入该函数?

<小时/>

我也尝试过:

...
xhr[e] = $.ajax({
url: node_json,
success: add_result_to_info(nodename, e)
});

}
}
// outside loop
function add_result_to_info(nn, e) {
$('#host_'+nn).append("last modified: " + xhr[e].getResponseHeader("Last-Modified"));
}

AJAX 调用的来源:Get the modified timestamp of a file with javascript

最佳答案

如果 arr 确实是一个数组,只需使用 .forEach 甚至更好的 .map (在旧版浏览器上使用填充程序)来封装每次迭代的范围,而不需要额外的闭包:

var xhrs = arr.map(function(e) {
var nodename = e.hostname;
var node_json = "/nodes/" + nodename;

html +='<a href="'+node_json+'" target="_blank" id="host_'+nodename+'">data</a>';

return $.ajax({
url: node_json
}).done(function(data, status, xhr) {
$('#host_'+nodename).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
});
});

使用 var xhrs = arr.map() 而不是 .forEach 的原因是,您可以(免费)获得调用另一个回调一次的能力每个 AJAX 请求均已完成:

$.when.apply($, xhrs).then(function() {
// woot! They all finished
...
});

关于javascript - 从 ajax 调用内部将变量传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068263/

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