Backbone Collection Fetch - 使用自定义错误处理程序覆盖ajax错误处理程序

时间:2016-08-19 16:52:27

标签: javascript jquery backbone.js error-handling

我正在一个复杂的应用程序结构中工作,我正在努力更好地处理错误。在代码中,定义了一个显示错误的通用错误处理程序。

我希望我的集合/模型提取更加礼貌地失败,并显示一个很好的错误消息。发生的事情是两者都被解雇了,但我希望将错误标记为以某种方式处理,以便它不会继续冒泡。

Example in jsFiddle

// generic error handler
console.log("generic error");
$(document).on('ajaxError', function( event, xhr, settings ) {
    console.log("adding generic", xhr);
    $("#errorDiv").append("<div>Generic error: " + xhr.status + " " + xhr.statusText + "</div>");
});

console.log("define collection");
var TestCollection = Backbone.Collection.extend({
    url : "http://jsfiddle.net/Kieveli/wouoxsab"
});

console.log("fetch collection");
// fetch and provide default error
var tests = new TestCollection();
tests.fetch( {
   error: function(collection, response, options) {
      console.log("adding custom", response);
      $("#errorDiv").append("<div>Custom Error: " + response.status + "</div>");

      // How to stop generic ajaxError from firing??
      console.log("options", options);
  }
 });

您对如何阻止一般错误事件的发生有任何想法吗?

1 个答案:

答案 0 :(得分:1)

典型的时尚,我在60分钟的搜索中找不到答案,然后在发布后5分钟找到答案:

在获取选项中使用global:false。

Javascript: How to stop multiple jQuery ajax error handlers?

http://api.jquery.com/Ajax_Events/

https://jsfiddle.net/Kieveli/wouoxsab/6/

tests.fetch( {
    global: false,
    error: function(collection, response, options) {
    console.log("adding custom", response);
    $("#errorDiv").append("<div>Custom Error: " + response.status + "</div>");

    // How to stop generic ajaxError from firing??
    console.log("options", options);
  }
 });