01647

ustreamer-01647

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()に降りる同期通信にしちゃおー(ポチポチ).するとうわあああああ(始めに書いた現象).