使用Ionic 2进行POST调用

时间:2016-05-11 12:47:51

标签: javascript ionic-framework angular ionic2

我一直在努力实现对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。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:3)

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

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 observables方法:

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());
);

并使用setupLogin方法订阅:

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
    });
}