我正在尝试使用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文件的数量?
...anyway,它当然应该接受我的原始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]
设置为“未定义”。
有什么(更多)小贴士可以帮我解决这个问题吗?
https://stackoverflow.com/questions/18413969
复制相似问题