-4

ばかげた質問であることはわかっていますが、コンテンツを xmlhttpRequest 内の配列に保存して後で使用する方法を知りたいです。

onlinestatus = new Array(count);
for (var i = 0; i <= count; i++) {
    GM_xmlhttpRequest({
        method: 'GET',
        url: 'http://www.website.com/player/' + player[i] + '/details.php',
        onload: function(responseDetails) {
            buddypage = jQuery(responseDetails.responseText);
            online = jQuery("span#OnlineStatus", buddypage);
            onlinestatus[i] = online.text();
        }
    });
    GM_log("Current: " + onlinestatus[i]);
}​
4

2 に答える 2

2

ajax リクエストは、将来の不明な時点で返されることを知っておく必要があります。
配列は、ajax リクエストのコールバックでのみ使用できます。

AJAX -非同期JavaScript および XML

于 2012-05-13T23:54:44.357 に答える
1

Web リクエストが非同期になり、値がすべて配列内の同じ場所に格納されます。

count = 2 と仮定すると、次の順序で処理が行われます。

  1. 設定i = 0
  2. チェック、i < countが真、ループを続行
  3. Web リクエスト A が開始されます
  4. 印刷するresult[0]
  5. 設定i = 1
  6. チェック、i < countが真、ループを続行
  7. WebリクエストB開始
  8. 印刷するresult[1]
  9. 設定i = 2
  10. チェック、i < countは偽です。ループを終了します
  11. ... 時を経て ...
  12. Web リクエスト A が完了し、 が設定result[i]されるので、設定されますresult[2] = "foo"
  13. Web リクエスト B が完了し、 が設定result[i]されるので、設定されますresult[2] = "bar"

つまり、結果の配列は最終的に[undefined, undefined, "bar"]. 配列の最後の値は、どちらの Web 要求が最初に終了するかに応じて、foo または bar になります。いずれにせよ、Web リクエストが完了するまでに、iすでに間違った値が設定されており、結果がすでにログに記録されているため、結果配列が空のように見えます。

于 2012-05-14T00:06:42.483 に答える