2

我正在读取一个带有 jquery ajax 函数的 rss 文件,我成功创建了数组函数mycarousel_itemList并使用 push 用项目填充它。我想在我当时创建的函数中使用这个数组,但我得到了错误:

mycarousel_itemList没有定义

怎么了?

<script type="text/javascript">
var rss = 'http://search.issuu.com/userxxx/docs/recent.rss';
$.ajax({
type: 'GET',
url: 'js/issuuGallery/proxy.php?url='+rss,
dataType: 'xml',
success: function(xml) {
    var ul = document.createElement("ul");
    ul.setAttribute('id', 'issuu-gallery');
    ul.setAttribute('class', 'overview');

    $(xml).find('item').each(function(){
        var mycarousel_itemList = [];
        var id = $(this).find('[name="documentId"]').attr('value');
        var src = 'http://image.issuu.com/'+id+'/jpg/page_1_thumb_small.jpg';
        mycarousel_itemList.push(src);
        console.log(mycarousel_itemList);
    });
}
});
function mycarousel_itemLoadCallback(carousel, state)
{

for (var i = carousel.first; i <= carousel.last; i++) {
    if (carousel.has(i)) {
        continue;
    }

    if (i > mycarousel_itemList.length) {
        break;
    }

    carousel.add(i, mycarousel_getItemHTML(mycarousel_itemList[i-1]));
}
   };

/**
 * Item html creation helper.
 */
function mycarousel_getItemHTML(item)
{
return '<img src="' + item.url + '" width="75" height="75" alt="' + item.url + '" />';
};

jQuery(document).ready(function() {
jQuery('#mycarousel').jcarousel({
    size: mycarousel_itemList.length,
    itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback}
});
});

4

1 回答 1

0

我假设您只是加载一次 rss 提要,然后创建一个带有结果的轮播。如果是这样,这很容易解决。

  1. 寻找这一行:

    var mycarousel_itemList = [];
    

    那是在 ajax 成功回调中创建一个局部变量。您要做的是使其成为全局并将其移至顶部(使其成为 < script> 标记内的第一行)。

  2. 将 $.ajax 调用移至文档就绪回调内部。

  3. 找到以下 jcarousel 代码:

    jQuery('#mycarousel').jcarousel({
        size: mycarousel_itemList.length,
        itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback}
    });
    

    将它作为回调中的最后一件事移动到 $.ajax 回调中。

您的最终代码应如下所示:http: //jsfiddle.net/h35VQ/

于 2012-09-24T05:37:11.983 回答