猿问

从 ionic 中的 HTTP 请求获取响应

如何在 ionic 中读取 http 请求的响应?我正在 ionic 中创建一个登录页面,并且尝试从 json 对象中的 php 代码获取响应。后端的响应是由我无法在离子中获取它返回的。


.ts 代码


this.http.post("http://localhost:83/api/v2/signin.php", JSON.stringify(this.credentials))

        .subscribe(data => {

          

          this.data = data;

          console.log(this.data);


          if(data.response=="success"){

            let toast = this.toastCtrl.create({

              message: 'Login was successfully',

              duration: 3000,

              position: 'top',

              cssClass: 'dark-trans',

              closeButtonText: 'OK',

              showCloseButton: true

            });

            toast.present();

           

            this.navCtrl.setRoot(HomePage);           

            this.storage.set("session",response);

            this.global.session=response;

          }else{

            this.global.loginState="login";

            let alert = this.alertCtrl.create({

              

              subTitle: data.response,

              buttons: ['OK']

            });

            alert.present();

          } 

登录失败时控制台显示如下


Response {_body: "{"response":"Invalid login details entered"}"

成功后我有以下内容


 Object { _body: "{\"response\":\"success\",

   \"data\":{\"id\":\"4\",\"name\":\"Eli James\",

   \"email\":\"eli_james@gmail.com\"}}",

  status: 200, ok: true, statusText: "OK",

我的php代码是这样的:


         if($row['email']==$email AND 

                 $row['status']=='1'){

       

                       $response=array(

                        "response"=>"success",

                        "data"=>array(

                            "id"=>$row['id'],

                            "name"=>$row['name'],                     

                            "email"=>$row['email']


                            )


                        );          

                      }else{

                    $response=array("response"=>"Invalid login details entered");

                     }

                   echo json_encode($response);


沧海一幻觉
浏览 131回答 2
2回答

江户川乱折腾

string您将从后端获取响应正文。您必须将正文解析为 JSON,然后使用它。只需将行从 更改为this.data = data;即可this.data = JSON.parse(data)。或者this.data = JSON.parse(data._data);

缥缈止盈

告诉 HttpClient 您希望使用 post() 方法的观察选项获得完整响应:this.http.post("http://localhost:83/api/v2/signin.php", JSON.stringify(this.credentials), {observe: 'response') .subscribe(fullResponse => { ... ....现在,httpClient 返回 HttpResponse 类型的 Observable,而不仅仅是正文中包含的 JSON 数据。
随时随地看视频慕课网APP
我要回答