Javascript方法召回和打印

时间:2012-06-25 09:59:50

标签: javascript function variables methods

我正在学习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个函数的结果。我更喜欢&#34; for&#34;仅在第三个函数中,并回忆其他方法的向量,但它们不是全局的。我不想拥有全局变量(如果可能的话),我该怎么办呢?

2 个答案:

答案 0 :(得分: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 :(得分: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将具有与最后一个元素相关的值。将值分配给多个元素或者只获取数组中的最后一个元素。