2

不使用 REST couchDB API 的典型模式是“如果不存在则创建”。例如,如果我想创建一个不存在的数据库:

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

作为一名程序员,两者201 Created都是412 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.
});

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

4

1 回答 1

5

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

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

function myHandler(data, statusText, jqXHR) {
    // do something with the data
}

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

$.ajax({
    type: 'PUT',
    url: DB + 'mydatabase',
    complete: function(jqXHR) {
        if (jqXHR.status === 200 || jqXHR.status === 412) {
            // do something
        }
        return;
    }
});
于 2013-05-04T21:54:51.327 回答