如何中止Ember Data发出的HTTP请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何中止Ember Data发出的HTTP请求?相关的知识,希望对你有一定的参考价值。

我有一个必须在某些用户操作上更新(重新加载)的模型。如果其中两个动作连续快速发生,我希望第一个更新请求被中止,因为a)它的结果将过时,并且b)请求需要一些时间(因此排队这些请求也不是一个选项)。

有没有办法通过Ember Data轻松实现这一目标?

答案

我重写了应用程序适配器的ajax方法,将XMLHttpRequest对象添加到数组中。

App.ApplicationAdapter = DS.RESTAdapter.extend({
  xhr: [],

  ajax: function(url, type, hash) {
    var adapter = this;

    return new Ember.RSVP.Promise(function(resolve, reject) {
      hash = adapter.ajaxOptions(url, type, hash);

      hash.success = function(json) {
        Ember.run(null, resolve, json);
      };

      hash.error = function(jqXHR, textStatus, errorThrown) {
        Ember.run(null, reject, adapter.ajaxError(jqXHR));
      };

      adapter.xhr.push(Ember.$.ajax(hash));
    }, "DS: RestAdapter#ajax " + type + " to " + url);
  },
});

然后,当我想中止请求时(在这种情况下,从路由中):

this.store.adapterFor('discussion').xhr.forEach(function(xhr) {xhr.abort();});

以上是关于如何中止Ember Data发出的HTTP请求?的主要内容,如果未能解决你的问题,请参考以下文章

在 AngularJS 中中止挂起的 ajax 请求

Ember 数据 JSON-RPC 请求示例

无法在 ember 中向后端服务器发出请求(错误:'No Access-Control-Allow-Origin')

中止上一个后无法发出新的获取请求

如何取消/中止 jQuery AJAX 请求?

发出请求时出错:请求被中止:无法创建 SSL/TLS 安全通道