Angularjs 从restangularpost获得响应
发送重新启动的帖子后,如何获取响应对象Angularjs 从restangularpost获得响应,angularjs,restangular,Angularjs,Restangular,发送重新启动的帖子后,如何获取响应对象 firstAccount.post("Buildings", myBuilding).then(function() { console.log("Object saved OK"); }, function() { console.log("There was an error saving"); }); 我正在尝试获取新的对象id 谢谢。我没有直接使用restanglar,但是您的帖子可能需要返回一个带有ID的JSON对象。然后,您的
firstAccount.post("Buildings", myBuilding).then(function() {
console.log("Object saved OK");
}, function() {
console.log("There was an error saving");
});
我正在尝试获取新的对象id
谢谢。我没有直接使用restanglar,但是您的帖子可能需要返回一个带有ID的JSON对象。然后,您的success函数必须接受它作为参数
firstAccount.post("Buildings", myBuilding).then(function(resp) {
console.log(resp.id); // if the JSON obj has the id as part of the response
});
我是Restanglar的创造者。Flim是对的:) 在promise中,您将获得从服务器返回的对象:)
谢谢 restangular POST期望得到与POST相同的对象作为响应
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.post<models.ITypeA>(objectToPost)
.then((responseObject: models.ITypeB) => {
return responseObject;
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
这在typescript定义中可以清楚地看到。假设我们有一个方法,它将接收类型为ITypeA
的对象,并将其发布到类似http://whatever/api/objects
。假设RESTAPI返回一个201和一个json,其响应对象可以相同也可以不同。在我们的例子中,假设返回的类型是ITypeB
。
然后,我们的restangular将无法使用标准的ITypeA
,并期望得到ITypeB
的响应,因此以下代码将不正确,因为restangular将期望收到ITypeA
类型的响应(与发布的响应相同)
publicPostanObject(objectToPost:models.ITypeA):ng.IPromise{
返回this.restanglar.all(“对象”)
.post(objectToPost)
.然后((响应对象:models.ITypeB)=>{
返回响应对象;
},(restangularError:any)=>{
抛出“添加对象时出错。状态:”+restangularError.Status;
});
}
这可以通过使用customPOST来解决,因此上面的代码是正确的,如下所示:
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.customPOST(objectToPost)
.then((restangularizedObjectTypeB: restangular.IElement) => {
return restangularizedObjectTypeB.plain();
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}
publicPostanObject(objectToPost:models.ITypeA):ng.IPromise{
返回this.restanglar.all(“对象”)
.customPOST(objectToPost)
.then((restangularizedObjectTypeB:restangular.IElement)=>{
返回restangularizedObjectTypeB.plain();
},(restangularError:any)=>{
抛出“添加对象时出错。状态:”+restangularError.Status;
});
}
总之,有几件事需要注意:
然后
部分).post(objectA)
Restanglar,如果有的话,将期望一个成功的回调,其响应类型与objectA相同。customPOST(objectA)
.plain()
,如我的第二个示例所示,其中响应实际上不是ITypeB
对象,而是restanglar.IElement
你确定这是真实的反应吗?我有一个api端点,它返回的数据与发送的数据不同。在本票上,我得到的数据与在
post
上发送的数据相同,包括重新启动的方法和所有的。嘿。Restangular方法确实添加到所有服务器响应中。这是它之所以伟大的部分原因。您收到的所有对象都已增强,可以与Restanglar一起使用。如果你的帖子实际上没有从服务器返回任何东西,那么我实际上是在返回与你发布的相同的对象,以便你得到一些东西。因此,如果您获得的数据与您发布的数据完全相同,请检查您是否从服务器返回数据。如果您在POST和GET中需要不同的内容,您可以使用requestInterceptor(如果对所有请求都是这样),或者使用customPOST或customPUT方法发送自定义对象,但你能做到work@mgonto如何仅获取干净的响应对象?如果没有重新设置三角形的包装对象?@NarekMamikonyan,您可以对响应中得到的“重新设置三角形”对象调用方法.plain()
。见下面我的答案。
public postAnObject(objectToPost: models.ITypeA): ng.IPromise<models.ITypeB> {
return this.restangular.all("objects")
.customPOST(objectToPost)
.then((restangularizedObjectTypeB: restangular.IElement) => {
return restangularizedObjectTypeB.plain();
}, (restangularError: any) => {
throw "Error adding object. Status: " + restangularError.status;
});
}