jQuery和couchdb:是否有可能在一个处理程序中处理"已创建"和"已存在"?

gri*_*yvp 2 ajax rest jquery couchdb

一个典型的模式没有使用REST couchDB API是"如果不存在则创建".例如,如果我想创建一个数据库,如果它不存在:

$.ajax({
  type: 'PUT',
  url: DB + 'mydatabase',
});
Run Code Online (Sandbox Code Playgroud)

作为一个程序员,无论是201 Created412 Prerequisite failed是成功的,因为我想数据库是在地方,如果它只是创造或者是已经在这里它是完美的罚款和我在一起.但从jQuery视角来看,201是成功而且412是失败 - 所以我需要编写大量代码才能确保数据库到位:

$.ajax({
  type: 'PUT',
  url: DB + 'mydatabase',
}).fail( function( arg ) {
  if( 412 == arg.statusCode ) {
    // This is success.
  } else {
    //  This is failure.
  }
}).done( function( arg ) {
  //  This is another success.
});
Run Code Online (Sandbox Code Playgroud)

这有效地使代码在两个地方成功(甚至在两个不同的回调中!).是否有可能以较少的代码减少错误处理,最好是在一个地方处理成功?

Oct*_*ean 5

或者,您可以使用该statusCode对象将共享事件处理程序绑定到200412.

$.ajax({
    type: 'PUT',
    url: DB + 'mydatabase',
    statusCode: {
        200: myHandler,
        412: myHandler
    }
});

function myHandler(data, statusText, jqXHR) {
    // do something with the data
}
Run Code Online (Sandbox Code Playgroud)

为了完整性,这是我在评论中描述的另一种方式.

$.ajax({
    type: 'PUT',
    url: DB + 'mydatabase',
    complete: function(jqXHR) {
        if (jqXHR.status === 200 || jqXHR.status === 412) {
            // do something
        }
        return;
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 很好,我不知道jQuery支持这种选择. (2认同)