ngResource 在 $save() 之后从 POST 响应中检索唯一 ID
ngResource retrive unique ID from POST response after $save()
所以我有一个资源定义如下:
angular.module('questionService', ['ngResource'])
.factory('QuestionService', function($http, $resource) {
var QuestionService = $resource('/api/questions/:key', {}, {
query: {
method:'GET',
isArray:true,
},
save: {
method: 'POST',
}
});
return QuestionService
});
稍后,我采用一些表单输入并执行以下操作
var newQ = {
txt: $scope.addTxt
};
QuestionService.save(newQ)
服务器通过重新发出对象的 JSON 并使用新的唯一 ID 设置位置标头来响应 POST 请求。 问题是 Angular 没有将返回的 JSON 或位置标头保存到对象中,并且没有使用来自服务器的 ID 进行设置以供将来操作。 我尝试了很多事情,例如:
transformResponse: function(data, headersGetter) {
locationHeader = headersGetter().location;
key = locationHeader.split('/').slice(-1)[0];
data.key = key;
return data;
}
但是,返回的数据项似乎未被使用。 我错过了什么吗? 这似乎是与 REST API 交互的一个非常常见的用例。
谢谢!
您需要
有一个成功处理程序来手动将新 id 分配给newQ
:
QuestionService.save(newQ, function(data) {
newQ.id = data.id;
});
但是有一个更好的实现相同的目标。由于QuestionService
是资源类对象,因此可以像这样实例化newQ
:
var newQ = new QuestionService({text: $scope.addTxt});
然后,致电newQ
$save()
:
newQ.$save();
现在newQ
应该有服务器返回的新 id。
我有 Asp.Net 运行 WebApi2 的服务器,我使用 Ok(number) 返回内容,结果返回例如"6"。 返回后,角度显示一个包含承诺和状态的对象,原型和深度重复的层次结构,但没有值,没有"6"。所以我去看数据去哪里,为了看到数据在哪里,我定义了一个转换,我看到了数据,但它不是 json......
后来我把它改成 follow,现在我的成功函数中有一个 obj,它有一个名为 'returnValue' 的子属性(如我所定义),这个对象保存我的值。
transformResponse: function(data, header){
var obj={};
obj.returnValue=angular.fromJson(data);
return obj;
},
相关文章:
- post()向服务器动态生成的数据返回空响应
- jQuery/Ajax-试图通过Ajax创建POST方法并获得对HTML的响应
- jQuery post,访问responseType或回调中的响应
- 如何根据使用Angular2发出的post请求的响应来呈现输出
- 获取从 .post() 到 PHP 文件的响应,但只能在 MVC 中获取
- $http.post() angularjs 响应函数未按正确的顺序执行
- 在javascript中获取 http.post,然后发送响应
- Angular无法读取http post响应中的cookie
- 从aspx.cs页面获取jquery post中的Null响应而不是json
- 检索POST JSON响应
- 在转发到代理目标并将响应发送回客户端之前,编辑POST参数
- Jquery ajax post禁用启用字段并获取响应
- 在文件上传器POST响应中获取额外引号
- 无法模拟POST请求--没有得到正确的响应
- $('body').html()从来自Firefox中$jQuery.post的响应数据中给出了空白内容
- POST 响应未等待回调完成
- 跨域 Post 方法 ajax 调用使用 jQuery 和 XML 响应
- 下载通过 nodejs 响应 POST 请求而发送的文件
- 返回一个纯JS AJAX调用的响应- POST
- 添加基于响应- POST数据发送到电子邮件使用PHP格式