1

我正在学习 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);
}

我想要第三个函数来打印其他两个函数的结果。我宁愿只在第三个函数中使用“for”并回忆其他方法的向量,但它们不是全局的。我不想拥有全局变量(如果可能的话),那我该怎么做呢?

4

2 回答 2

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

于 2012-06-25T10:31:15.640 回答
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";
  }
}
于 2012-06-25T10:05:13.450 回答