灰烬适配器通过Ajax Post接收数据

时间:2018-10-30 08:08:25

标签: ajax ember.js

我是Ember的新手,这是我关于stackoverflow的第一个问题。我在Ember项目的客户端上工作,我需要从Rest Api中提取JSON数据。以前我可以提取如下数据:

// app \ adapters \ product.js

export default DS.RESTAdapter.extend({

host:"http://10.1.7.13,
pathForType(){
 return "content.php?method=list&pr1=product&pr2=all&uname=aaa&upass=1234";    }});

// app \ serializers \ product.js

export default DS.RESTSerializer.extend({

normalizeResponse (store, primaryModelClass, payload, id, requestType){

payload={
    products:payload
};
return this._super(store,primaryModelClass, payload, id, requestType)

} });

然后更改了后端的url,现在username和userpassword不再是url的参数,而是作为表单数据发送。

在新表格中,列表产品的网址为“ http://10.1.7.13/content.php?method=list&pr1=product&pr2=all

尽管如果我仅使用此URL页面进行访问,则会给​​出警告,因为用户名和userpassword未定义。所以我无法访问json数据。

但是如果我发送如下的ajax发布请求

 $.ajax({

    type:"POST",

    url: "http://10.1.7.13/content.php?method=list&pr1=product&pr2=all",

    data: {
    "uname":"aaa",
    "upass":1234
    },

    success: function(response){

    console.log(response);
    }
});

我已经看到了我的JSON数据,因为已经输入了用户名和密码作为表单数据。 我的问题是,在哪里可以将其称为ajax帖子,如何将响应加载到产品模型?理想情况下,我想调用适配器并将响应发送到序列化器,然后像以前一样将其添加到模型中。但是我研究了适配器方法,却没有找到对我有帮助的方法。我是新来休息api的人,所以您能告诉我该怎么办吗?

1 个答案:

答案 0 :(得分:0)

您需要覆盖适配器的 findAll 方法,该方法用于获取多个记录。在这种情况下,您需要将HTTP方法从GET修改为POST以传递数据。

我假设您正在使用DS.RESTAdapter,因此代码为:

import DS from "ember-data";

export default DS.RESTAdapter.extend({
   host: "http://10.1.7.13",

   pathForType() {
     return "content.php?method=list&pr1=product&pr2=all";
   },

   findAll(store, type, sinceToken, snapshotRecordArray) {
     let query = this.buildQuery(snapshotRecordArray);
     let url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll');

     return this.ajax(url, "POST", { data: {uname: "aaa", upass: "1234"} });
    }
 });

我认为密码是您帖子中的字符串。如果您的序列化程序可以在更改URL之前使用数据,则它应该仍然有效。

当试图确定需要定制哪些适配器时,我将methods的Ember Data源代码粘贴到定制适配器中,并逐步完成代码。学习内部原理的好方法。修改序列化器也一样

最后一点,在代码中硬编码用户名和密码是不安全的。我不知道这是否仅是示例,但想对其进行说明。