SSブログ

XMLHttpRequest の使用例 その2 [NT]

XMLHttpRequest の使用例 の続き。

XMLHttpRequest を複数使う、または繰り返し使う場合の例は次の通り。

ポイントは、

  • XMLHttpRequest を関数内のローカル変数にした。
  • 匿名関数を使って XMLHttpRequest.onreadystatechange イベントハンドラに XMLHttpRequest を引数として渡す。

この 2 点。XMLHttpRequest をローカル変数にすることで 2 回目に XMLHttpRequest を呼び出されたとき上書きされてしまうことを防止する。onreadystatechange には直接は引数を渡すことはできないので、匿名関数にしてそこからメソッドを呼び出す。

このようにすると、XMLHttpRequest を複数、または繰り返し使うことができる。

参考文献


タグ:JavaScript
nice!(0)  コメント(2)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 2

m-ito

はじめまして。m-itoと申します。
私も同じようにXMLHttpRequestを関数内のローカル変数にして、実際うまく動いてるのですが、ふと疑問に思ったのが、loadContents()の内部で定義されたhttp変数は関数を抜けると解放されてしまいますよね?。実際にhandleHttpResponse(http)が呼び出される時にはその引数の実体がガーベジコレクトされた後で存在しなくなってる場合も有るのかなぁと悩んでるのですが、どう思われますか?。御教示いただければ幸いです。
by m-ito (2009-10-19 13:37) 

p2

m-ito さんこんにちは。
> loadContents()の内部で定義されたhttp変数は関数を抜けると解放されてしまいますよね?
今回の場合は、loadContents() の内部でクロージャに http を渡しているので http は解放されないと思います。いわゆる、「スコープ」の話です。
http://d.hatena.ne.jp/susie-t/20070719 でも述べられているのですが、クロージャに引数を渡したときは http はレキシカルスコープにあります。

https://developer.mozilla.org/Ja/Core_JavaScript_1.5_Guide:Working_with_Closures も参照して下さい。m-ito さんと似たような質問が回答されています。

そもそも、私がサンプルとして例示したコードは https://developer.mozilla.org/ja/AJAX/Getting_Started を元にしているので、開発元がリファレンスとしているコードなので少なくとも Firefox では問題ないでしょう :-)

こんな回答でよろしいでしょうか...
by p2 (2009-10-19 22:01) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。