这让我疯狂,但首先我想道歉。我对javascript/jquery非常陌生。然而,我确实尽力通过不懈地寻找来解决这个问题,但无济于事。重新运行.getJSON on .click返回新结果(jQuery/AJAX)
这是我的问题:我正在为客户端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代码片段:
<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 =滑块,并在其中创建我的加载动画,但在此之后它才会加载幻灯片项目,直到它执行aSlider()函数为止。
我已经手动重现了我想在控制台中发生的事情,并且工作正常:增加$ currentPage:check。删除.slider div:检查。执行flickr():检查。执行aSlider:检查。初始化advSlider():检查。所有的第二页图像都可以完美显示。
该序列有些问题,我根本不知道它是什么。我尝试了一切可以找到的aSlider来等待,但它不起作用。请帮忙!
谢谢
我认为advSlider()调用应该在ajaxComplete处理程序中。不知道是不是这个问题 – Andy 2011-06-01 22:45:45
我也试过这个,包括使用更一般的$(window).ajaxComplete()。尽管如此,没有任何工作。 – bfricka 2011-06-01 23:55:07