我正在模型上使用ember save调用来持久保存并调用我的REST调用。
_model.save().then(() =>{
console.log("success");
}, (error) {
console.log("error");
});
我的REST api返回202响应(在“网络”选项卡上看到),在控制台上,我总是看到“错误”被打印出来。余烬中是否有任何东西将202视为错误?如果是,如何解决?
答案 0 :(得分:2)
Ember Data尝试针对某些状态代码(包括202)将响应正文解析为JSON。空字符串不是有效的JSON。因此,正如您在某些评论中提到的那样,它将引发错误:
SyntaxError:“ JSON.parse:第1行第1列的数据意外结束 JSON数据”
由于引发,save()
返回的Promise被拒绝。
您有两个选择:
请注意,{}
是有效的JSON,但不符合JSON API规范:
JSON对象必须位于每个JSON API请求的根,并且 包含数据的响应。该对象定义了文档的“顶部 级别”。
文档必须至少包含以下顶级文件之一 成员:
- 数据:文档的“主要数据”
- 错误:错误对象数组
- meta:包含非标准元信息的元对象。
答案 1 :(得分:1)
我更喜欢使用本机的Promise挂钩,例如:
model.save()
.then((idk) => {
console.log('idk', idk);
})
.catch(error => {
console.error(error);
});
或者如果您有能力使用异步/等待:
try {
await model.save();
} catch (error) {
console.error(error);
}
这两个代码片段都将告诉您为什么有错误(如果有错误:)
答案 2 :(得分:1)
这取决于您要实现的目标。如果您的template.hbs
有类似的东西
{{#each model as |myModel|}}
<tr>
<td {{action 'saveMe' myModel}}> {{myModel.someAttribute}} </td>
</tr>
{{/each}}
然后,您的controller.js
应该看起来像这样
actions: {
saveMe(myModel) {
return myArgument.save().then(() => {
console.log('foo success');
}).catch(errors => {
console.log('bar error');
});
}
}
该操作是保存要更改的属性值的更改。
答案 3 :(得分:0)
似乎已解决问题。我的回答是空白,因此ember将其扔到了错误响应中。即使使用202响应,后端也应该返回一些内容,或者必须重写应用程序适配器中的handleResponse方法。