Javascript 从ajax调用内部将变量传递给函数
我尝试使用此循环读取一些URL以读取其修改时间:Javascript 从ajax调用内部将变量传递给函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,我尝试使用此循环读取一些URL以读取其修改时间: 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&l
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)
});
AJAX调用的来源:您直接执行该方法,并将其结果作为
成功
回调的回调传递
xhr
已作为第三个参数传递,请重试
success: function(nn,status, xhr) {
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
}
如果还必须传递
节点名
,则需要使用返回函数的函数
success: (function(nn){
return function(data ,status, xhr) {
// you can use nodename here...
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
};
})(nodename)
您直接执行该方法并将其结果作为
success
回调的回调传递
xhr
已作为第三个参数传递,请重试
success: function(nn,status, xhr) {
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
}
如果还必须传递
节点名
,则需要使用返回函数的函数
success: (function(nn){
return function(data ,status, xhr) {
// you can use nodename here...
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
};
})(nodename)
您直接执行该方法并将其结果作为
success
回调的回调传递
xhr
已作为第三个参数传递,请重试
success: function(nn,status, xhr) {
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
}
如果还必须传递
节点名
,则需要使用返回函数的函数
success: (function(nn){
return function(data ,status, xhr) {
// you can use nodename here...
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
};
})(nodename)
您直接执行该方法并将其结果作为
success
回调的回调传递
xhr
已作为第三个参数传递,请重试
success: function(nn,status, xhr) {
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
}
如果还必须传递
节点名
,则需要使用返回函数的函数
success: (function(nn){
return function(data ,status, xhr) {
// you can use nodename here...
$('#host_'+nn).append("last modified: " + xhr.getResponseHeader("Last-Modified"));
};
})(nodename)
如果
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"));
});
});
如果
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"));
});
});
如果
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"));
});
});
如果
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"));
});
});
您的闭包代码是b0rked-您没有将函数引用传递给
success
,而是undefined
-这是(函数(nn)…(节点名)
的(不存在)返回值arr
实际上是一个数组,或者一个对象?你的闭包代码是b0rked-你没有传递一个函数引用到success
,而是未定义的-这是(函数(nn)…(nodename)
的(不存在)返回值,顺便说一句,arr
真的是一个数组吗,或者一个对象?你的闭包代码是b0rked-你没有传递一个函数引用到success
,而是未定义的-这是(函数(nn)…(nodename)
的(不存在)返回值,顺便说一句,arr
真的是一个数组吗,或者一个对象?您的闭包代码是b0rked-您没有将函数引用传递给success
,而是未定义的-这是(函数(nn)…(节点名)
的返回值arr
真的是数组还是对象?部分正确,除了nn
是他的循环变量,而不是AJAXresult@Alnitak,为该案例添加了一个版本。我以前已经尝试过,但不起作用。geíves出现了巨大的错误,因为结果数据在错误消息中,我认为整个响应都是这样的,因为现在使用(函数…
)时,这些恶作剧已经不再是正确的语法了。但我无法进一步测试,因为上面的解决方案有效。。。。谢谢你的帮助;)部分正确,除了nn
是他的循环变量,而不是AJAXresult@Alnitak,为该案例添加了一个版本。我以前已经尝试过,但不起作用。geíves出现了巨大的错误,因为结果数据在错误消息中,我认为整个响应都是这样的,因为现在使用(函数…
)时,这些恶作剧已经不再是正确的语法了。但我无法进一步测试,因为上面的解决方案有效。。。。谢谢你的帮助;)部分正确,除了nn
是他的循环变量,而不是AJAXresult@Alnitak,为该案例添加了一个版本。我以前已经尝试过,但不起作用。geíves出现了巨大的错误,因为结果数据在错误消息中,我认为整个响应都是这样的,因为现在使用(函数…
)时,这些恶作剧已经不再是正确的语法了。但我无法进一步测试,因为上面的解决方案有效。。。。谢谢你的帮助;)部分正确,除了nn
是他的循环变量,而不是AJAXresult@Alnitak,为该案例添加了一个版本。我以前已经尝试过,但不起作用。geíves出现了巨大的错误,因为结果数据在错误消息中,我认为整个响应都是这样的,因为现在使用(函数…
)时,这些恶作剧已经不再是正确的语法了。但我无法进一步测试,因为上面的解决方案有效。。。。谢谢你的帮助;)