使用Ionic 2进行POST调用

POST calls with Ionic 2

本文关键字:POST 调用 进行 Ionic 使用      更新时间:2023-09-26

我一直在努力用Ionic 2实现对ASP.NET API的POST调用。我在一个有用的指南的帮助下完成了GET,但我真的找不到任何类似的POST,直到我在YouTube上看到一段视频。在那个视频的帮助下,我在我的提供商中有了这个方法:

 backendlogin() {
  if (this.data) {
      return Promise.resolve(this.data);
  }
  return new Promise(resolve => {
      var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root' });
      var params = 'json=' + json;
      var headers = new Headers();
      headers.append('Content-Type', 'application/json');
      this.http.post('http://insertipadresshere/api/login',
          params, {
              headers: headers
          })
          .map(res => res.json())
          .subscribe(data => {
              this.data = data;
              resolve(this.data);
          },
          error => alert(error),
          () => console.log("Finished")
      );
  });
}

我的GET方法基本上是Ionic在创建提供程序时提供的方法。它们与这段代码类似,除了声明变量和附加头的部分,当然还有http.get而不是post。

这是我用来从页面的控制器调用提供者的函数:

setuplogin() {
    this.backend.backendlogin()
        .then(data => {
            this.data = data;
        });
    console.log(this.data);
} 

现在来谈谈这个问题。如果我了解所有内容,backendLogin()应该在出现故障时显示一个带有错误的警报,它确实这样做了。警报显示"[object object]"。控制台中唯一的东西是一个空日志,可能来自setupLogin(),因为数据是空的。api应该接受一个电子邮件地址和一个密码,并返回一个uID。有人能给我指正确的方向吗?

如果出现错误,我会拒绝承诺:

return new Promise((resolve,reject) => {
  var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
  var params = 'json=' + json;
  var headers = new Headers();
  headers.append('Content-Type', 'application/json');
  this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json())
      .subscribe(data => {
          this.data = data;
          resolve(this.data);
      },
      error => reject(error),
      () => console.log("Finished")
  );
});

也就是说,我认为没有必要创造一个原始的承诺。你可以利用toPromise的可观察性方法:

var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json())
      .toPromise();
);

获取错误

setuplogin() {
  this.backend.backendlogin()
    .then(data => {
        this.data = data;
        console.log(this.data);
    }, error => {
      // do something
    });
} 

最后,您可以直接使用observable而不是返回promise:

var json = JSON.stringify({ email: 'a@hotmail.com', password: 'root'});
var params = 'json=' + json;
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://insertipadresshere/api/login',
      params, {
          headers: headers
      })
      .map(res => res.json());
);

并以CCD_ 2方式订阅:

setuplogin() {
  this.backend.backendlogin()
    .subscribe(data => {
        this.data = data;
        console.log(this.data);
    },
setuplogin() {
  this.backend.backendlogin()
    .subscribe(data => {
        this.data = data;
        console.log(this.data);
    }, error => {
        // do something with error
    });
}