dポイントプレゼントキャンペーン実施中!

複数のHTMLファイルの更新日時をJavaScriptで調べる必要があり(サーバ側では仕様上できません)以下のように書いたのですが、readyStateで参照すると全てurls[2]の値になってしまいます。(つまり「/infomation/index.html」の更新日時)どのように回避すればよいのでしょうか。

onload=function () {

var urls = new Array(3);
urls[0]= "/about/index.html";
urls[1]= "/news/index.html";
urls[2]= "/infomation/index.html";

var request= new Array();

for(i=0;i<urls.length;i++){

request[i] = new XMLHttpRequest();
request[i].open("GET", urls[i]);
request[i].send(null);
request[i].onreadystatechange = function () {
if (request[i].readyState == 4) {
var lmdfd= request[i].getResponseHeader("Last-Modified");
以下、更新日時の確認処理
}

}

}

}

A 回答 (1件)

function () {


if (request[i].readyState == 4) {

ここの i のスコープを考えると、forのところの i ですが、この無名関数が呼ばれる時点で i は 2 になっていますので、毎回 request[2].readyState を参照するというのはその通り。

request[i].onreadystatechange = (function(x) {return function () {
if (request[x].readyState == 4) {
var lmdfd= request[x].getResponseHeader("Last-Modified");
以下、更新日時の確認処理
}
})(i);
    • good
    • 0
この回答へのお礼

ご回答をいただいた上に改善案まで示していただき、ありがとうございます。

処理が行われる順序についてや、
こうした書き方を見ること自体がはじめてで、勉強不足を感じざるをえません。
調べてみたいと思います。

お礼日時:2012/11/05 22:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!