1

JavaScriptを勉強していますが、関数の呼び出しに問題があります...

これらは私の2つの機能です:最初の:

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

および2番目の関数:

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つの関数の結果を出力する3番目の関数が欲しいです。3番目の関数にのみ「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);
}

そしてあなたの3番目の機能で:

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次に、各関数の にアクセスできる 3 番目の関数を作成できます。

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 に答える