intra-martのajax処理でサーバサイドのロジックの記述(スクリプト開発モデル)のベストプラクティスを考えてみました。
通常、スクリプト開発モデルの場合はhtmlとjsで1セットだと思いますが、ajaxの場合は画面がないのでhtmlを必要としません。
htmlに<imart type="string">
を書いてjson形式の文字列を出力する方法もありますが、
以下のように記述することでjsファイルのみでシンプルに書けます。
function init(request) { var response = Web.getHTTPResponse(); response.setContentType('application/json; charset=utf-8'); // ここでやりたい処理する。 if(error) { // エラーの場合は500エラーを設定する。 response.setStatus(500); response.sendMessageBodyString('Error Message'); return; } //処理結果を設定。 var result = {}; response.sendMessageBodyString(ImJson.toJSONString(result)); }
エラー処理は500エラーにせず、200で返してintra-martが処理結果として推奨していると思われるResultObjectで結果を返すのもありだと思います。
ちなみにクライアントサイドは以下のようにimuiAjaxSend() or imuiAjaxSubmit()を使えばいいです。
imuiAjaxSend('#form', 'POST', 'json', function() { $(document.body).imuiIndicator(); }, function(xhr) { $(document.body).imuiIndicator('destroy'); var data = $.parseJSON(xhr.responseText); } );
ただ、上記の方法だと500エラーを返す場合、シンプルに書けないのでjQueryの$.ajax()を使用する方法もあると思います。
ただし、formのバリデーションが効かないので注意です。
$.ajax({ url: "xxxxx/xxxxx", data: { /* request object */ }, dataType: 'json' }).done(function(data){ console.log(data); }).fail(function(xhr){ console.log(xhr.responseText); });
上記のはAccel Platformでの話ですが、iwp7.2とかでもサーバサイドは同じように書けると思いますが、クライアントサイドはjQueryは使ってないと思うので、ImAjaxを使うことになると思います。