在EmberJS中进行AJAX GET和POST调用的正确方法

时间:2016-12-13 06:40:04

标签: javascript jquery ajax ember.js ember-model

我开始研究EmberJS,我非常喜欢它。它确实有一个学习曲线,但我相信它具有从根本上非常有意义的原则。

我的问题是如何在Ember JS中进行GET和POST调用。我知道有模型/商店,但模型(在我看来)只适用于特定实体的属性。

对以下问题的任何想法都会很棒。

1. USER A send friend request to USER B. Should there be a "Request"
   model? And do I just make a POST request?

2. Some arbitrary data needs to be returned for the page. Not
   particularly of a model. Should I still make a model for that?
   For use a simple GET request?

3. User needs to update this profile photo. How can the file
   to be uploaded, be set as a model attribute?

我应该如何定期进行GET和POST调用(如果我要这样做的话)。只需使用jQuery的$ .ajax()或者是另一种方式。我还找到了一个服务ember-ajax,它将$ .ajax扩展为promises样式。

任何想法都会非常感激。

EmberJS万岁:)

3 个答案:

答案 0 :(得分:4)

第一个选项:您可以使用ember-data。它具有自定义设置,例如serializersadapters

第二个选项:您可以使用ember-ajax之类的插件。

我们的用法就是使用jQuery' ajax()。我们编写了一个只包装jquery.ajax()的服务,并在我们的代码中随处使用它。我们相信它为我们提供了编写不同类型查询的灵活性。我们没有model ember-data

示例 - - 代码:

  export default Ember.Service.extend({
    doPostCall(target, data, options=null){
       //consider cloning options with Ember.$.extend
       var requestOptions= options || {};
       requestOptions.url=target;
       requestOptions.type='POST';
       requestOptions.data=JSON.stringify(data);
       doRemoteCall(requestOptions);
    },

    doGetCall(target, data=null, options=null){
       //consider cloning options with Ember.$.extend
       var requestOptions=options || {};
       requestOptions.url=target;
       requestOptions.type='GET';
       requestOptions.data=data;
       doRemoteCall(requestOptions);
    },

    doRemoteCall(requestOptions){
      //assign default values in here:
      //  such as contentType, dataType, withCredentials...

      Ember.$.ajax(requestOptions)
        .then(function(data) {
            Ember.run(null, resolve, data);
         }, function(jqXHR , textStatus, errorThrown) {
            jqXHR.then = null;
            Ember.run(null, reject, jqXHR, textStatus, errorThrown);
         });
    }
  });

PS:顺便说一句,如果你需要在服务器端运行你的应用程序(使用fastboot),你就不能使用jQuery。因此,请使用ember-network

答案 1 :(得分:3)

如果您正在对模型执行CRUD操作,那么ember-data很不错。在大多数应用中,CRUD操作占请求的约90%。

在某些情况下,应用需要发出不太适合余烬数据的请求,这就是ember-ajax进入游戏的地方。它允许你像jQuery那样做请求,还有一个很好的补充,即请求是通过一个服务来完成的,这个服务有一些扩展点,可以自定义像app一样使用的标题,这个更复杂只是原始的jquery。

如果你的应用程序要在fastboot中运行,你应该使用ember-network,因为它在浏览器和节点中都有效,而jquery / ember-ajax却没有。

答案 2 :(得分:0)

当前的最佳实践是ember-fetch。因为ember-networkember-fetch弃用了。

您只需运行以下命令即可安装ember-fetch插件,

ember install ember-fetch

然后只需导入提取,您就可以很好地使用提取方法。

import fetch from 'fetch';
import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    return fetch('/my-cool-end-point.json').then(function(response) {
      return response.json();
    });
  }
});
相关问题