Ajaxなのに同期通信するということと,ajax()のエラー処理
同期性
ファイル読み込み後のデータを,通信後も使用したい場合は非同期性を切ろう.同期通信しよう.
非同期通信
「async: true」を書かずとも,初期値はtrueだから省略できる.
/** * TSVファイルのパース結果を持つクラス * @param {undefined} characterClass キャラクタクラス * @returns {undefined} */ function Tsv(characterClass) { var filePath = this.filePath = TABLE_DIR + characterClass + TABLE_EXTENTION; var tableData; $.ajax({ url: filePath, dataType: "text", async: true }).done(function(data) { tableData = $.parse(data).results; }).fail(function(data) { var message = "file not found: " + filePath; console.log(message); }); this.data = tableData; console.log(this.data); }
undefined (16:21:32:451) at public_html/js/fezskill.js:46
未定義だね.
同期通信
「async: false」と書き換える.
[object Object] (16:23:20:994) at public_html/js/fezskill.js:46
やったぜ.
エラー処理
元々y.okano blog: jQuery: CSVパースのプラグインの例文に従っていた.ついasync: trueにしてみたら,困ることになった.なぜ非同期にしたか.ajax()がつまづいた場合のエラー処理だ.同期通信だと「NETWORK_ERR: XMLHttpRequest Exception 101: A network error occurred in synchronous requests.」でfail()に降りない.
非同期通信では「Failed to load resource: Unexpected end of file from serve」でfail()に降りる.fail()に降りる同期通信にしちゃおー(ポチポチ).するとうわあああああ(始めに書いた現象).