我正在努力解决使用ajax的Loopback问题。我尝试通过jQuery函数.ajax()
POST一个对象数组,但我根本就不能。服务器总是向我发送422错误(不可处理的实体)。
奇怪的是:我可以使用GUI资源管理器或命令行执行完全相同的请求。
我有两种型号:Nemo&通过hadMany / belongsTo关系关联的PendingUpdates(我将它们截断为更具可读性):
// nemo.json
{
"name": "Nemo",
"base": "PersistedModel",
"properties": {
"id": {
"type": "Number",
"id": true,
"required": false,
"generated": true
}
},
"relations": {
"pendingUpdates": {
"type": "hasMany",
"model": "PendingUpdate",
"foreignKey": "nId"
}
}
}
和
// pending-update.json
{
"name": "PendingUpdate",
"base": "PersistedModel",
"properties": {
"id": {
"type": "Number",
"id": true,
"required": false,
"generated": true
},
"nId": {
"type": "Number",
"required": true
},
"parameter": {
"type": "String",
"required": false
},
"requestType": {
"type": "Number",
"required": true
}
},
"relations": {
"nemo": {
"type": "belongsTo",
"model": "Nemo",
"foreignKey": "nId"
}
}
}
这就是事情:我尝试POST一组pendingUpdates。使用strongloop资源管理器,我只需POST
:在/Nemos/{id}/pendingUpdates
上,ID为:2,数据为[{"requestType": 3, "parameter": "stuff"}, {"requestType": 2, "parameter": "otherStuff"}]
。我有一个200响应代码,包含正文中创建的对象。
但是,当我尝试使用jQuery发送完全相同的请求客户端时,我得到了422。
以下是片段:
var data = [
{"requestType": 3, "parameter": "stuff"},
{"requestType": 2, "parameter": "otherStuff"}
];
$.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx", {
data: data,
headers: {
Accept: "application/json",
contentType: "application/json"
},
method: "POST"
}).done(success)
.fail(fail);
我尝试直接使用data
,{data}
,{"data": data}
,JSON.stringify({"data": data})
,JSON.stringify(data)
......
有人可以帮助我吗?
非常感谢,
Bjorge
答案 0 :(得分:1)
好的,经过一天用控制台和WireShark做事后,我发现了什么问题;我在这里写下答案,以帮助处理同样问题的未来人。
POST
请求已发送,但没有任何数据。 POST
请求(即使用JSON对象,而不是数组)。我能够看到有两个Content-Type
标题。我改变了我的功能,只发送一个。
var data = [
{"requestType": 3, "parameter": "stuff"},
{"requestType": 2, "parameter": "otherStuff"}
];
$.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx"), {
data: JSON.stringify(data),
accept: "application/json",
contentType: "application/json",
method: "POST"
}).done(success)
.fail(fail);
我希望将来可以帮助某人。