3

J Send 仕様形式で JSON 応答を返す JSON サーバーの上にバックボーン js Web アプリを作成しています。

その形式の例をいくつか示します。

/投稿を取得

{
 "status": "success",
 "data": {
   "posts" [
     {"id": 1, "title": "A blog post"}, 
     {"id": 2, "title": "another blog post"}
   ]
 }
}

投稿 /posts

{
  "status": "fail",
  "data": {
    "title": "required"
  }
}

デフォルトでは $.ajax の「エラー」イベントは http コードによってトリガーされますが、JSend 仕様の形式は HTTP コードをまったく使用しないため、$.ajax エラー ハンドラーを書き直す必要があります。

デフォルトでの動作方法 (http コード):

$.ajax({
  error: function() {
    // Do your job here.
  },
  success: function() {
    // Do your job here.
  }
});

本文を解析したときにトリガーされる $.ajax エラーハンドラーを書き直すにはどうすればよいですか?「ステータス」プロパティが「失敗」または「エラー」の場合

4

2 に答える 2

4

直感に反するように見えますが、関数に入れる必要がありsuccessます。自分で値を確認するだけです。

$.ajax({
  error: function() {
    // Handle http codes here
  },
  success: function(data) {

    if(data.status == "fail"){
      // Handle failure here
    } else {
      // success, do your thing
    }

  }
});
于 2013-01-21T15:53:00.663 に答える
1

物事を乾いた状態に保つために、次のようなものを使用できます。

function JSendHandler(success, fail) {
    if (typeof success !== 'function' || typeof fail !== 'function') {
        throw 'Please, provide valid handlers!';
    }
    this.success = success;
    this.fail = fail;
}

JSendHandler.prototype.getHandler = function () {
    return function (result) {
        if (result.status === 'fail') {
            this.fail.call(this, arguments);
        } else {
            this.success.call(this, arguments);
        }
    }
};

function success() { console.log('Success'); }
function error() { console.log('Fail!'); }

var handler = new JSendHandler(success, error);

$.ajax({
  error: error,
  success: handler.getHandler()
});
于 2013-01-21T15:59:39.923 に答える