dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

script タグで json

2007-02-10 23:24:25 | emacs
サーバと通信すると、同一のドメインのサーバに限定されてしまいますが、script タグなら他ドメインのサーバの JavaScript を読み込むことができます。
動的に script タグを生成して JSON 形式のデータを読み込めば、ドメインを意識せずに ajax を実現できます。

script タグで script オブジェクトを生成しておいて、
<script id="..."></script>
動的に script タグを生成して、この script オブジェクトを新しい script オブジェクトに置換します。

var new_script = document.createElement("script");
new_script.id = script_id;
var script.parentNode.insertBefore(new_script, script);
script.parentNode.removeChild(script);
script = news_script;
script.src = url;

サーバが返すデータは以下のような JavaScript の代入文です。
data = ...;

データに日本語などマルチバイトの文字が含まれる場合には、これらの文字列を uXXXX のように Unicode の文字コードにエンコードしておくと文字化けしません。

それから、script.src = url を実行してから実際にサーバのデータを読み込むには少し時間がかかります。
Firefox の場合には script に onload イベントを指定することができますが、IE の場合には onload イベントが使えないようです。
そのため IE ならデータがダウンロードされたかをチェックする関数を作成して、データがダウンロードされたら次の処理を実行するようにする必要があります。
それにはサーバから返される json オブジェクトが、リクエストしたデータと一致しているかをチェックできるようにしとくとよいでしょう。

setTimeout("wait_json()", interval);

function wait_json() {
if (json データがダウンロードされていたら) {
{次の処理};
}
else {
setTimeout('wait_json()', interval);
}
}