I am trying to preload some images with a jQuery AJAX call, but am having real problems passing a (url) string into a function within the success function of the AJAX call (if that makes sense).
Here is my code as is stands:
//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);
};
One can see my (failed) attempt at passing the url through into the .each()
call - url
ends up takes the value of increasing integers. Not sure why or what these relate to, maybe the number of jpg files?
...anyway, it should of course take the single value in my original urls array.
Thanks for any help - I always seem to get in a bit of a twist with these callbacks.
PROGESS?
So, I mucked around a bit, taking heed of comments from @ron tornambe and @PiSquared and am currently here:
//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);
};
I tried putting the image_link(data, i)
here there and everywhere (in each nested function etc.) but I get the same result: the value for i
is only ever logged as 3. I suspect that this is because all references to i
point to the same thing and by the time the asynchronous task actually gets to image_link(data, i)
the for...
loop is over and done with (and hence has a value of 3). Needless to say this gives urls[i]
as 'undefined'.
Any (more) tips how I can get round this?
Just to share a similar problem I had in case it might help some one, I was using:
to make the variable for the load function, But I should have used:
without the
$( )
Don't know why but now it works! Thanks, finally i saw what was going wrong from this post!