2012-06-25 26 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将具有与最后一个元素相关的值。将值分配给多个元素,或者只是获取数组中的最后一个元素。