Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 从restangularpost获得响应_Angularjs_Restangular - Fatal编程技术网

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;
});
}
总之,有几件事需要注意:

  • Restangular可以在成功回调中获取响应对象
    然后
    部分)
  • 如果使用方法
    .post(objectA)
    Restanglar,如果有的话,将期望一个成功的回调,其响应类型与objectA相同
  • 如果您想发布objectA但得到objectB(不同类型)的响应,请使用方法
    。customPOST(objectA)
  • 重要:响应实际上是一个“重新角度化”的对象,它包装了“真实”响应对象。这意味着响应包含一些restangular方法。如果您只是希望响应对象调用响应上的方法
    .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;
                });
    }