プロフィール

ニーシェ

Author:ニーシェ
ひっそりと。
こっそりと。

日常の些細な笑いに貪欲に。

お気に召したら
相互リンク宜しくお願いしまふ。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

カウンター

RSSフィード

リンク

このブログをリンクに追加する

amazon ajax

with Ajax Amazon

臆病な白虎。~蛍と遭遇~
映画や音楽、書物に芸術。 表現されたモノに触れ、色褪せる毎日を少し楽しくするためのブログ2。




--PRAY FOR JAPAN--
被災者の方々の無事を心より願います。

ソフトバンクケータイをお持ちの方はこちらから義援金をお願い致します。
softbank 義援金プロジェクト:http://info.mb.softbank.jp/f/disaster/




スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。



jQueryの$.get() でデータが読み込まれない件
2010.10.04(mon)
ワンピースの話をしたいところですが。

時間がないので明日にして、
今日はjQueryのお話をしたいと思います。

jQuery というのはjavascriptのライブラリで広く使われております。

かくいう僕も最近ではずっと使っているのですが、
今日は一つ困ったことがあったので共有。


それはcsvファイルを読み込むというコードです。

そこでjQueryの$.get()を使うことにしました。
こちらは

 $.get(){ url, function }

という形でurlが指すデータファイルを読み込み、読み込みに成功したらfunctionを実行するという命令。
こんな感じです。

 $.get(){ '/フォルダ/aaa.csv', function( csvData ){ record = csvData; } };

functionの引数にはなぜかcsv内のデータが格納されます。


で、本題です。
例えばこんな風に書いたとき、

function hoge(){

 console.log("前");
 $.get(){ '/フォルダ/aaa.csv', function( csvData ){ record = csvData; console.log("中");} };
 console.log("後");

}

「前」「中」「後」どのような順でコンソール画面に出るでしょうか。

正解は「前」「後」「中」


プログラムは上から順に流れていきますが、
この場合に関してはなんと順番が入れ替わってしまいます。

なぜこのようなことが起きるのかと言いますと・・・


$.get()がAjaxの関数で非同期通信を行うため


これに気付くまでに半日を要しました。

そうなんです、非同期でcsvファイルを読み込んでくるために、
読み込みが終了してしまう前にconsole.log("後");を実行してしまう。

consoleならまだいいんですけど、
僕はこの位置で読み込み終わったと思い込んでいた変数 record を使ってしまっていたので、
データを全く読み込んでくれなかったんです。


なので上の例だと、

record = $.ajax(){
 url: '/フォルダ/aaa.csv';
 async: false;
}.responseText;

のように書いて非同期通信を false にしなければいけません。
(構文が間違っていたらすみません;思い出しながら書いています)

こうすることで順番通りにプログラムが動くので、

ちゃんとcsvファイルが読み込めて、
見事に自分がやりたかった実装ができました。

いやぁ良かった!



スポンサーサイト

 

この記事に対するコメント


 

この記事に対するコメントの投稿















管理者にだけ表示を許可する


 

この記事に対するトラックバック

トラックバックURL
→http://holyterror23ver02.blog111.fc2.com/tb.php/865-eb665eab
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。