ajax - Ember - 中止 ajax 请求

标签 ajax xmlhttprequest ember.js ember-data

我想知道如何中止请求。

例如,我发出 App.MyModel.find() 之后我想在它从服务器返回之前取消/中止它。我希望是这样的:

var res = App.MyModel.find();   //request sent to server
res.abort();                    // abort the request before completion

但这不起作用 - 返回的对象是一个 promise 并且既没有 abort 也没有 cancel 方法。

澄清

我正在寻找如何调用 abort底层 XMLHttpRequest 对象上的方法。

最佳答案

对于那些想知道如何做到这一点的人,这里是我取消 jquery ajax 请求的方法。

首先,我在我的应用程序商店中定义了一个新方法,它将在我的自定义 RESTAdapter 上调用 cancelQuery。

App.Store = DS.Store.extend({
  cancelQuery: function(type){
    var adapter = this.adapterFor(this.modelFor(type).modelName);
    if(typeof adapter.cancelQuery === 'function'){
      adapter.cancelQuery();
    }
  }
});

在我的自定义 RESTAdapter 中,我定义了新函数并像这样覆盖 ajaxOptions :

App.YOURMODELAdapter = DS.RESTAdapter.extend({
  jqXHRs: [],
  ajaxOptions: function(url, type, hash) {
    // Get default AjaxOptions
    var ajaxOptions = this._super(url, type, hash);

    // If the function was defined in the DS.RESTAdapter object,
    // we must call it in out new beforeSend hook.
    var defaultBeforeSend = function(){};
    if(typeof ajaxOptions.beforeSend === 'function'){
      defaultBeforeSend = ajaxOptions.beforeSend;
    }
    ajaxOptions.beforeSend = function(jqXHR, settings){
      defaultBeforeSend(jqXHR, settings);
      this.jqXHRs.push(jqXHR); // Keep the jqXHR somewhere.
      var lastInsertIndex = this.jqXHRs.length - 1;
      jqXHR.always(function(){
        // Destroy the jqXHRs because the call is finished and 
        // we don't need it anymore.
        this.jqXHRs.splice(lastInsertIndex,1);
      });
    };

    return ajaxOptions;
  },
  // The function we call from the store.
  cancelQuery: function(){
    for(var i = 0; i < this.jqXHRs.length; i++){
      this.jqXHRs[i].abort();
    }
  }
});

现在,您只需在 Controller 的上下文中调用 cancelQuery

this.store.cancelQuery('yourmodel');

关于ajax - Ember - 中止 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920052/

相关文章:

javascript - 如何在reactjs中制作无限滚动条/"Load More"

jquery - YUI 有像 jQuery 那样的选择器吗?

javascript - 是否有函数可以查找当前使用 XMLHtttpRequest 从文件加载的字节数?

javascript - 将下拉选择放在变量中并在搜索查询中使用

javascript - 如何在 react native android中获取响应 header ?

javascript - 使用 jQuery 在文本区域中按 Enter 键

javascript - Ember.js:每次 api 往返都会添加相同值的新部分

ember.js 连接 Controller ()

使用 <ui :repeat> 进行 ajax 更新后 CSS 无法正确呈现

javascript - 使用 JSON 新闻 api 创建搜索查询