我试图用一个 jQuery AJAX 调用预加载一些图像,但是在将一个(url)字符串传递到 AJAX 调用的成功函数中的一个函数中时遇到了实际问题(如果这有意义的话)。
以下是我的原则:
//preloader for images on gallery pages
window.onload = function() {
setTimeout(function() {
var urls = ["./img/party/"]; //just one to get started
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data,url) {
$(data).find("a:contains(.jpg)").each(function(url) {
new Image().src = url + $(this).attr("href");
});
}
});
};
}, 1000);
};
我们可以看到我尝试将 url 传递到 .each()
调用中(失败了)-url
最终会得到增加的整数值。不确定为什么或者这些与什么有关,也许是 jpg 文件的数量?
... 不管怎样,它当然应该接受原始 urls 数组中的单个值。
谢谢你的帮助——我似乎总是对这些复试有点纠结。
进展?
所以,我四处闲逛了一下,留意了@ron tornambe 和@PiSquared 的评论,现在我在这里:
//preloader for images on gallery pages
window.onload = function() {
var urls = ["./img/party/","./img/wedding/","./img/wedding/tree/"];
setTimeout(function() {
for ( var i = 0; i < urls.length; i++ ) {
$.ajax({
url: urls[i],
success: function(data) {
image_link(data,i);
function image_link(data, i) {
$(data).find("a:contains(.jpg)").each(function(){
console.log(i);
new Image().src = urls[i] + $(this).attr("href");
});
}
}
});
};
}, 1000);
};
我试着把 image_link(data, i)
放在这里和任何地方(在每个嵌套函数中等等) ,但是我得到了相同的结果: i
的值只被记录为3。我怀疑这是因为所有对 i
的引用都指向同一个东西,当异步任务实际到达 image_link(data, i)
时,for...
循环就结束了(因此值为3)。不用说,这给了 urls[i]
“未定义”。
还有什么(更多)技巧可以让我避开这个问题吗?