読者です 読者をやめる 読者になる 読者になる

Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

intra-martでajaxを使用する場合のサーバサイドロジックをシンプルに記述する方法。

intra-mart JavaScript

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を使うことになると思います。