Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在一个路由中有多个ajax调用?_Javascript_Ember.js_Ember Data - Fatal编程技术网

Javascript 如何在一个路由中有多个ajax调用?

Javascript 如何在一个路由中有多个ajax调用?,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我试图从两个类别(新闻和事件)中获取两个get 2博客帖子列表,然后将它们显示在我主页的两个不同列中。我需要执行两个单独的Ajax调用才能获得这些博客文章。我不在这个操作中使用余烬数据,因为我不认为在这个场景中使用它有什么好处(但我可能错了) 上述代码有效。但是从我在Ember文档中读到的内容来看,我应该在模型钩子中获取这些数据(而不是设置控制器),以利用承诺。因此,我尝试以这种方式重新编写代码: export default Ember.Route.extend({ model() {

我试图从两个类别(新闻和事件)中获取两个get 2博客帖子列表,然后将它们显示在我主页的两个不同列中。我需要执行两个单独的Ajax调用才能获得这些博客文章。我不在这个操作中使用余烬数据,因为我不认为在这个场景中使用它有什么好处(但我可能错了)

上述代码有效。但是从我在Ember文档中读到的内容来看,我应该在
模型
钩子中获取这些数据(而不是
设置控制器
),以利用承诺。因此,我尝试以这种方式重新编写代码:

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.RSVP.promise),这将在两个内部承诺都解决后得到解决。

您可以使用
RSVP.hash()返回承诺的散列。

您可以这样做:

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' })
        });
    }
});

阅读更多有关余烬承诺的信息

谢谢您的回答。我知道我应该只有一个承诺,但我不知道我的resolve()函数会做什么。。。我应该链接Ajax调用还是什么?不需要链接。在每次成功回调时,检查另一个承诺是否已解决。如果是这样,解决外部承诺。
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' })
        });
    }
});