LoginSignup
12
14

More than 5 years have passed since last update.

jQueryのajaxで通信するまでもない場合に使えるテクニック

Posted at

解決したい課題

例えば以下のようなケースを考える。

sample.js
//~ ~ ~ app logic ~ ~ ~

getInfo('hoge').done(function(response) {
    alert('OK!');
}).fail(function(response) {
    alert('NG!');   
});
sdk.js
function getInfo(request) {
    return $.ajax({
        type : 'GET',
        url : 'http://foo.bar/' + request,
    });
}

WebAPIをWrapするSDKを開発するとして、ajaxの実行部分の実装を切り出して、ajaxの戻り値をそのまま返すような関数を実装したとする。

上記のsample.jsの挙動としては、sdk.jsの関数を呼び出してajax通信が成功したらdone、失敗したらfailが呼ばれる。

ここで、getInfoに渡すパラメータが通信するまでもなく不正な場合、通信コストを減らすために通信する前にエラーを返す、つまりfailを呼んであげたいところ。

SDKの実装を少し工夫する

ではajaxの実行前にパラメータチェックを入れ、アプリ側でdonefailをちゃんとハンドルできるように変更してみる。

sdk.js
function getInfo(request) {
    if (!isValid(request)) {
        return {
            done : function() {
                return this;
            },
            fail : function(callback) {
                callback({message : 'invalid parameter'});
                return this;
            }
        };
    }

    return $.ajax({
        type : 'GET',
        url : 'http://foo.bar/' + request,
    });
}

function isValid(param) {
    // ~ 略 ~
}

こんな感じに、パラメータ不正の場合はgetInfoの戻り値でdoneとfailのプロパティを持ったオブジェクトを返してやれば良い。

注意点としては、ちゃんとdoneも返してあげないと、アプリ側がfailよりも先にdoneを実装した場合にfailが呼ばれなくなってしまう点。doneは何もせずにthisを返せばOK。

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14