【发布时间】:2012-01-18 00:38:31
【问题描述】:
这让我发疯了,但首先我想道歉。我对 javascript/jquery 很陌生。然而,我尽我所能通过不懈地搜索来解决这个问题,但无济于事。
这是我的问题:我正在为客户 b/c 实施 Flickr 照片库,她坚持使用它来上传她的照片。为此,我使用我购买的滑块库和一些 jQuery/AJAX 来创建所有功能/请求。滑块是一个 jQuery 脚本,它使用专门的结构化选择器来创建幻灯片。结构是这样的:
<div class="slider">
<div class="slider-item">
<img src="path/to/img.jpg"/>
<img class="thumbnail" src="path/to/img_thumbnail.jpg"/>
<div class="caption">My Caption</div>
<div class="thumbnail-caption">My Thumb Caption</div>
</div>
</div>
我设置的函数是这样的:
var $currentPage = 1;
var $totalPages;
var $sliderHTML = "<div class='slider'></div>";
var $perPage = 18;
function flickr(){
$(function (){
$($sliderHTML).prependTo("#portfolio");
$.getJSON('http://path/to/flickr?perpage=' + $perPage + '&page=' + $currentPage + '&format=json&jsoncallback=?',
function(data){
$totalPages = Math.ceil(data.photos.total / $perPage);
$.each(data.photos.photo, function(i,item){
// Loop results and grab all variables I need - Examples omitted
// After which, append variables to string
var $sliderItem = '<div class="slider-item"><img height="' + imgHeight + '" src="' + photoURLo + '" alt="' + photoTitle + '" /><img height="75" width="75" class="thumbnail" src="' + photoURLm + '" alt="' + photoTitle + '" /><div class="caption">' + photoTitle + '</div><div class="thumbnailCaption">' + photoTitle + '</div></div>';
// Then append to the main div
$($sliderItem).appendTo(".slider");
});
});
}
// Finally call the function on document.ready
$(document).ready(function(){
flickr();
});
为了确保滑块在 flickr 函数完成之前不会加载(这会导致出错),我只是将它封装在一个函数中并在 window.load 上调用它。效果很好。最后我用 window.load 事件初始化滑块。
$(window).load(aSlider()); // loads the slider script
$(window).load(advSlider()); // initializes the slider
整个设置运行良好。最初。
这就是问题所在。我需要调用更多图片,这根本不起作用!这是我的 HTML 中的代码 sn-p:
<script type="text/javascript">
$('#moreSlides').click(function (){
if($totalPages == $currentPage){ //checks for last page
$currentPage = 1; //resets to page one
}
else {
$currentPage++; // increments page
}
$('.slider').remove(); //removes entire slider div
flickr();
$(".slider-item").ajaxComplete(aSlider());
advSlider();
});
</script>
这样或那样总是失败。我尝试在控制台中单步执行此单击事件,它基本上看起来是它到达 flickr() 函数并只是传递它而不是执行该函数(如果我单步执行它,我可以看到它在控制台加载)。但是,它最终会执行该函数……它会创建 div class=slider,并在其中创建我的加载动画,但之后它不会加载幻灯片项目,直到它执行 aSlider() 函数。
我已经手动复制了我想在控制台中发生的事情,它工作正常:增加 $currentPage:检查。删除 .slider div:检查。执行 flickr():检查。执行滑块:检查。初始化 advSlider():检查。一切都完美地显示了所有第二页图像。
顺序有问题,我根本不知道它是什么。我已经尝试了所有我能找到的让 aSlider 等待的方法,但它不起作用。请帮忙!
谢谢
【问题讨论】:
-
我认为 advSlider() 调用也应该在 ajaxComplete 处理程序中。不知道是不是这个问题
-
我也试过这个,包括使用更通用的 $(window).ajaxComplete()。到目前为止,没有任何效果。
标签: ajax jquery flickr getjson