角度订阅数据json值

时间:2017-11-24 05:17:28

标签: angular

我正在使用Angular 5,我的下面的功能是将数据发布到服务器

doLogin(){
  var link = 'https://www.sportsmanager.us/Ionic/ASPPages/IonicRMLogin.asp?Login=T&O=2';
  var myData = JSON.stringify({txtEmailAddress: this.txtEmailAddress,txtPassword:this.txtPassword});
  this.http.post(link, myData)
       .subscribe(data => {
      alert(data['code'])
   }, error => {
     alert("Oooops!");
  });


}

和服务器在以下格式中返回json

{"code":"0","msg":"The email address entered is not assigned to any adult coaches. Please try a different email address or contact your administrator for assistance.", "page":"IonicRMHome.asp"}

当我尝试通过数据['code']获取代码值时。我得到未定义的错误。

4 个答案:

答案 0 :(得分:1)

只需执行console.log(data),您就会明白为什么会出错。

我的猜测是它是一个json响应,它有data.detail.code

答案 1 :(得分:1)

来自服务器的数据总是以字符串形式出现。所以,请在使用

之前解析它

尝试

  this.http.post(link, myData)
       .subscribe(data => {
       data = JSON.parse(data);
      alert(data['code'])
   }, error => {
     alert("Oooops!");
  });

答案 2 :(得分:0)

根据您的错误消息,您似乎已将错误的电子邮件地址传递给API,但如果您的电子邮件地址正确无误,那么您可以尝试使用以下代码进行检查,因为如果您的API无需使用JSON.stringify接受Content-type: application/json

doLogin() {
  const link = 'https://www.sportsmanager.us/Ionic/ASPPages/IonicRMLogin.asp?Login=T&O=2';

  const myData = {
    txtEmailAddress: this.txtEmailAddress,
    txtPassword: this.txtPassword
  };

  this.http.post(link, myData).subscribe(data => {
    console.log(data);
  }, error => {
   alert("Oooops!");
  });
}

如果您的API不接受Content-type: application/json,那么您必须在POST API调用中添加标头,如下所示:

this.http.post(link, myData, {
  headers: new HttpHeaders().set('Content-type', 'Content type accepted by API'),
}).subscribe(data => {
  console.log(data);
}, error => {
  alert("Oooops!");
});

答案 3 :(得分:0)

我能够通过以下方式完成它:

let dataJSON = JSON.parse(data["_body"]);