2012年4月19日木曜日

[javascript] jQuery.ajaxで同期通信

ajaxといえば非同期通信ですが、単にデータ取得するだけでも便利なので同期通信でも
使用してみました。
jQuery.ajaxで同期通信する場合のメモです。

そもそも最初は非同期とか意識してなくて、以下のようにやろうとしてました。

var hoge = 0;
$.getJSON("json.js", {"pram1":"a","param2":"b"}, function(data,status){
hoge = data.key1;
});


hogeを外部で使用しようとしても値が入っていない。
変数スコープの問題もあるのですが、そもそも非同期通信なのでこういう書き方自体
まずいということが分わかりました。

なので、jQuery.ajaxを使用して同期通信に変更。

var retText = $.ajax({url: "json.js", data: {"param":"1", ,"param2":"b"}, async: false});


「async: false」で同期通信になります。
jQuery.ajaxはXMLHttpRequestを返します。
retText.responseTextにはjson形式のテキストが入っているのですがjsonと理解されずにそのまま
テキストなので、定義し直します。

eval("var retData=" + retText.responseText);


これでjsonとして認識されるので、retData.key1とかで使用できます。

0 件のコメント:

コメントを投稿