javascript
  • jquery
  • ajax
  • 2012-09-19 71 views 2 likes 
    2

    我正在閱讀一個帶有jQuery ajax函數的rss文件,在成功創建數組函數mycarousel_itemList並使用push填充項目。我想,我再創建一個函數來使用這個數組,但我得到的錯誤:從jQuery返回一個數組ajax成功函數

    mycarousel_itemList is not defined

    什麼錯?

    <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} 
    }); 
    }); 
    

    +0

    它看起來像jQuery的(文件)中。就緒叫你引用的mycarousel_itemList嘗試計算大小,但我不認爲該變量在那裏。你知道導致錯誤的具體行號嗎? – jennyfofenny

    +1

    'mycarousel_itemList'是一個局部變量,它只能在.each()循環中使用。嘗試省略「var」關鍵字。但更糟糕的是:您在ajax調用完成之前嘗試訪問mycarousel_itemList,您將不得不重新考慮您的程序流。 – devnull69

    +0

    如果函數'mycarousel_itemLoadCallback'錯誤在第二位。我不知道如何使數組在ajax的成功函數之外的其他函數中可用。這是我的問題 – Alexander44

    回答

    0

    我假設你只是加載RSS提要一次,然後創建一個與結果的傳送帶。如果是這樣,這很容易解決。

    1. 尋找這一行:

      var mycarousel_itemList = []; 
      

      即創造了ajax成功回調中的局部變量。你想要做的就是把它變成全局的,並把它移到頂端(使它成爲< script>標籤中的第一行)。

    2. 將$ .ajax調用移動到文檔就緒回調中。

    3. 找到下面的jCarousel代碼:

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

      它移動到$就回調作爲回調的最後一件事裏面。

    你的最終代碼應該是這樣的:http://jsfiddle.net/h35VQ/

    相關問題