javascript - 如何在一条 route 进行多个 ajax 调用?

标签 javascript ember.js ember-data

我正在尝试从 2 个类别(新闻和事件)中获取两个 get 2 博客文章列表,然后将它们显示在我主页的 2 个不同栏中。我需要执行 2 个单独的 Ajax 调用才能获取这些博客文章。我没有将 ember-data 用于此操作,因为我没有看到在这种情况下使用它的优势(但我可能是错的)。

export default Ember.Route.extend({
  setupController(controller, model) {
    var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

    Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
      controller.set('news', data.posts);
    });
    Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' }).then(function (data) {
      controller.set('events', data.posts);
    });
  }
});

上面的代码有效。但根据我在 Ember 文档中阅读的内容,我应该在 model Hook (而不是 setupController)中获取这些数据以利用 promise 。所以我尝试以这种方式重写我的代码:

export default Ember.Route.extend({
  model() {
    var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

    return {
      news: function () {
        return Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }).then(function (data) {
          return data.posts;
        })
      },
      events: function () {
        return Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' }).then(function (data) {
          return data.posts;
        })
      }
    };
  }
});

但这行不通。 Ajax 调用在页面呈现后完成,但为时已晚。我不确定我做错了什么。在这种情况下使用 ember-data 会有什么优势吗?

最佳答案

您可以使用 RSVP.hash()

返回 Promise 的哈希值

你可以这样做:

export default Ember.Route.extend({
    model() {
        var wpUrl = 'http://public-api.wordpress.com/rest/v1/sites/company.wordpress.com/posts/?number=2&category=';

        return new Ember.RSVP.hash({
            news: Ember.$.ajax({ url: wpUrl + 'news', dataType: "jsonp", type: 'GET' }),
            events: Ember.$.ajax({ url: wpUrl + 'events', dataType: "jsonp", type: 'GET' })
        });
    }
});

阅读更多关于 Ember 中的 promise here

关于javascript - 如何在一条 route 进行多个 ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18969330/

相关文章:

ember.js - 我可以在 Ember.js 中仅在一侧设置多对多关系吗?

javascript - Android - 如何拦截 iframe(webview) 中的链接并检查它是否已完全加载

javascript - JSON Lint 说它是有效的但是 JSON.parse 抛出错误

javascript - 当没有互联网连接时停止所有 future 调用的更好方法

ruby-on-rails - 为 Ember 格式化 Rabl 或将 Ember 映射到 Rabl?

node.js - 如何将项目迁移到yarn Flat模式?

google-maps - Ember-data:在 Controller / View 中使用模型

javascript - 如何在casperjs代码中设置代理

javascript - 如何在 EmberJs 中将具有变量和静态部分的属性传递给组件?

ember.js - 使用 ember-data 在 Ember.js RC1 中侧载 belongsTo 数据