for (var i = 0; i < theTagNames.length; i++) {
var url = baseURL + "?" +
"jsoncallback=?" +
"&method=flickr.photosets.getPhotos" +
"&format=json" +
"&api_key=" + api +
"&photoset_id=" + theTagNames[i].id;
tagID = theTagNames[i].id;
console.log('for: ' + i)
$.getJSON(url, {}, function (data) {
tmpSetName = theTagNames[tmpi].title._content;
category = theTagNames[tmpi].description._content;
tmpi += 1;
keepTrack = 0;
$.each(data.photoset.photo, function (z, item) {
if (i == limit) return false;
console.log('each: ' + z)
var thumbURL = 'http://farm' + item.farm + '.static.flickr.com/' + item.server + '/' + item.id + '_' + item.secret + '_s.jpg';
var largeURL = thumbURL.replace('_s.jpg', '_b.jpg');
keepTrack = z
if (keepTrack == 0) {
$('#flickrImages').append('<div style="float: left;background-color: #102C53; color: #fff; width: 690px; text-align:left; font-weight: bold; padding: 3px;" id="title' + tmpSetName + '">' + tmpSetName +
'<span id="span' + tmpSetName.replace(/ /g, '_') + '" style="cursor: pointer; float: right;" onclick="clickedTitle(this);">' +
' [Start Slideshow]' +
'</span>' +
'</div>');
}
if (keepTrack <= (displayLimit - 1)) {
$('#flickrImages').append('<span align="left" style="float: left;" id="imgDiv">' +
'<a style="outline: none;" rel="' + tmpSetName.replace(/ /g, '_') + '" title="" href="' + largeURL + '" id="imgLink' + tmpSetName.replace(/ /g, '_') + i + '">' +
'<img id="img' + i + '" src="' + thumbURL + '" style="border: 1px solid #102C53; margin: 3px;" alt="' + tmpSetName + '" />' +
'</a>' +
'</span>');
} else if (keepTrack == (displayLimit + 1)) {
showMoreImages = true;
} else {
$('#flickrImages').append('<span align="left" style="float: left; display: none; visibility: hidden;" id="hidden' + tmpSetName.replace(/ /g, '_') + '">' +
'<a style="outline: none;" rel="' + tmpSetName.replace(/ /g, '_') + '" title="" href="' + largeURL + '" id="imgLink' + tmpSetName.replace(/ /g, '_') + i + '">' +
'<img id="img' + i + '" src="' + thumbURL + '" style="border: 1px solid #102C53; margin: 3px;" alt="' + tmpSetName + '" />' +
'</a>' +
'</span>');
}
});
});
}
}
Currenlty上面的代码可以工作,但是当我刷新页面时,它往往会使图像失序(图像的错误标题以及与该标题一致的错误图像)。由于 $,每个可以有超过50个图像来获得每 theTagName ,它似乎已经超越了自己。
有时它的顺序正确,但往往不是。
是否可以暂停 for(var i = 0; i&lt; theTagNames.length; i ++){,直到 $。每个中的所有图片都为止找到并附加到 flickrImages div?
答案 0 :(得分:0)
您应该将整个$.getJSON(url, {}, function (data) { ...
放在for循环之外的单独函数中,然后传入i
,否则i
的值会随着异步情况而改变。
此外,您应该为$ .each函数的index参数使用不同的变量名。
所以你的代码看起来像这样:
for (var i = 0; i < theTagNames.length; i++) {
// stuff
getFlkrJSON(data, i);
}
function getFlkrJSON(data, i){
$.getJSON(url, {}, function (data) {
//stuff
}
}