2012-06-25 23 views
1

我學習JavaScript和我有一些問題的功能召回...JavaScript方法調用和打印

這些是我的兩個功能: 第一:

function geisson() { 
    var iabile = new XMLHttpRequest(); 
    iabile.onreadystatechange = function() { 
     if (iabile.readyState == 4) { 
      var objectjson = {}; 
      var arrayCards = []; //creazione dell'array che conterrà le cards 
      objectson = JSON.parse(iabile.responseText); 
      arrayCards = objectson.cards; 
      var Ettore = []; //Vèttore di cards 

      //the results 
      for (i = 0; i < arrayCards.length; i++) 
       document.getElementById('image').src = "http://www.mysite.com/png/public/card/" + arrayCards[i].__guid__ + "?width=292"; 
     } 
    } 
    iabile.open("GET", "gnekcard.json", true); 
    iabile.send(null); 
} 

和第二功能:

function Entity() { 
    var iabile = new XMLHttpRequest(); 
    iabile.onreadystatechange = function() { 
     if (iabile.readyState == 4) { 
      var objectjson = {}; 
      var arrayCards = []; //creazione dell'array che conterrà le cards 
      objectson = JSON.parse(iabile.responseText); 
      arrayCards = objectson.cards; 
      //the results 
      for (i = 0; i < arrayCards.length; i++) 
       document.getElementById('informazioni').innerHTML += "\r\n" + "Nome : " + arrayCards[i].__title__ + "\r\n" + "Vanity url: " + arrayCards[i].vanity_urls[0] + "\r\n"; 
     } 
    } 
    iabile.open("GET", "gnek.json", true); 
    iabile.send(null); 
} 

我想有第三功能,打印的其他2個函數的結果。我寧願只在第三個函數中擁有「for」,並回想其他方法的向量,但它們不是全局的。我不想有全局變量(如果可能的話),那我該怎麼做呢?

回答

1

geisson功能,你可以這樣做:

geisson.arrayCards = arrayCards; 

,你可以做同樣的Entity功能

Entity.arrayCards = arrayCards; 

然後你就可以創建一個可以訪問的arrayCards第三功能每個功能。

function displayArrayCards { 
    var geissonCards = geisson.arrayCards; 
    var EntityCards = Entity.arrayCards; 
    var i; 
    for(i = 0; i < geissonCards.length; i++) { 
    document.getElementById('image').src = "http://www.mysite.com/png/public/card/" + geissonCards[i].__guid__ + "?width=292"; 
    } 
    for(i = 0; i < EntityCards.length; i++) { 
    document.getElementById('informazioni').innerHTML += "\r\n" + "Nome : " + EntityCards[i].__title__ + "\r\n" + "Vanity url: " + EntityCards [i].vanity_urls[0] + "\r\n"; 
    } 
} 
1

在處理Ajax調用時應該做些什麼:使用回調。

例如:

function geisson(callback) { 
    var iabile = new XMLHttpRequest(); 
    iabile.onreadystatechange = function() { 
     if (iabile.readyState == 4) { 
      // ... 
      callback(objectson.cards); 
     } 
    } 
    iabile.open("GET", "gnekcard.json", true); 
    iabile.send(null); 
} 

,並在你的第三個功能:

function someName() { 
    geisson(function(data) { 
     for (var i = 0; i < data.length; i++) { 
      //... do something with data ... 
     } 
    }); 
    // call Entity the same way here... 
} 

順便說一下,在你的第一個功能,你總是覆蓋相同元素的src財產( document.getElementById('image'))。在這裏迭代整個數組沒有任何意義,最終正弦,src將具有與最後一個元素相關的值。將值分配給多個元素,或者只是獲取數組中的最後一個元素。