jQueryのajax()でslim3のコントローラからjson取得

簡単なサンプル。
GWTを使わず、javascript直書き。javaのライブラリはjson-lib使用

コントローラ。(sampleなのでDatastore触ってるけど、本来はControllerは直接Datastoreを触らず、Serviceクラス経由で取得すべき。)

public class CountController extends Controller {

	private Slim3ModelMeta meta = new Slim3ModelMeta();

	@Override
	protected Navigation run() throws Exception {
		int count = Datastore.query(meta).count();
		HashMap<String, Object> map = Maps.newHashMap();
		map.put("count", count);
		JSON json = JSONSerializer.toJSON(map);
		json.write(response.getWriter());
		response.flushBuffer();
		return null;
	}

}

HTML

<script type="text/javascript" src="./scripts/jquery-1.4.2.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
  	$.ajax({
		dataType: "json",
		data: null,
		url:"./boke/count",
		type:"GET",
		success: function(data){
			alert(data.count);
		}	
	});
  });
</script>

ajax(options)について

細かい制御が不要なら、ラッパメソッドのgetJSON()のほうがコードがすっきり。


optionsのdataTypeで"json"を指定すると、Acceptヘッダは「Accept: application/json, text/javascript, */*」となる。

dataTypeは、サーバへAcceptヘッダによってリクエストするデータの型を決めるもので、利用できるタイプは下記の通りです。
jQueryのAjaxリクエスト 4 - [JavaScript]All About

参照させていただいたエントリでは、サーバ側でAcceptヘッダによって処理を切り替えています。

このままでは、ブラウザがHTMLが欲しいのかjavascriptが欲しいのか分かりません。
HTMLが欲しい場合はエラーメッセージをdivの中に表示したいし、javascriptの場合はエラーメッセージをalertするなりdivにつっこむなりのスクリプトを返すようにしたいわけです。

そこで、boolean isRequiredJs(HttpServletRequest request )でHTTPHeaderのAcceptを見て、"text/javascript"や"application/javascript"が含まれていればjavascriptを要求しているものとして判定しています。
SAStruts + JQueryでのAjaxリクエスト判定の方法 - ゆろよろ日記

jQueryでの疑問

$(document).ready(func)は$(func)と書けるけど、前者の方がコードの意味がわかりやすくて良いと思うのだけど。後者のほうがよく見かけるのは、単にすぐ書けるから?