Ionic 4 POST в PHP бэкэнд - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь отправить данные в бэкэнд PHP, получить обратно значения и поместить их в массив. Следовательно, я создал функцию для этого. Тем не менее, я не должен менять API на серверной части (написано на PHP). Поэтому я не могу изменить его в соответствии с моими обычными методами использования POST.

Это моя функция

test() {
    let data = "method=getThis" + "&db=myDatabase"
    this.http.post("API URL", data).subscribe(data => {
      this.result = data;   // get data in result variable
      this.items = JSON.stringify(this.result); // then convert data to json string
      // console.log(this.items);
      this.allData = JSON.parse(this.items); // parse json data and pass json string
      // console.log(this.allData.length); // got result of particular string
      this.array = [];
      for (var i = 0; i < this.allData.length; i++) {
        this.array.push({
          data1: this.allData[i].data1,
          data2: this.allData[i].data2,
        })
      }
      console.log(this.array[0])
    })
  }

И это пример функции на сервере

else if($_POST['method']=="getThis"){
    global $conn;
    mysqli_select_db($conn, $_POST['db']);
    $name="";
    $result=array();
    $r=mysqli_query($conn,"select data1,data2 from table");
    while ($rs = mysqli_fetch_array($r,MYSQLI_ASSOC)){
        array_push($result,$rs);
    }
    echo json_encode(array("result"=>$result));
}

Так как же я могу получить это сообщение? Я застрял здесь. Я обычно пишу с JSON, а затем декодирую JSON на серверной части. Но на этот раз я не разрабатываю бэкэнд и не меняю его, поэтому должен использовать предоставленный.

Публикация с использованием POSTMAN с этим

method=getThis&db=myDatabase

работает хорошо. Не отправляю JSON просто текст. Так как же мне добиться этого в Ionic.

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Поскольку данные, которые вы отправляете, представлены в виде простого текста, вам необходимо добавить заголовок с указанием типа контента. import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
     headers: new HttpHeaders({
    'Content-Type':  'text/html'
    })
};

this.http.post("API URL", data, httpOptions).subscribe()
0 голосов
/ 14 ноября 2018

Сторона PHP должна возвращать JSON и сообщать, что тип содержимого браузера - application / json, проверьте свою кодовую базу на одной простой странице.

//demo.php
<?php
$data = ['message' => 'Hello world.'];
header("Content-Type: application/json; charset=UTF-8");

//If allow cross domain and not configration in Ngix/Apache
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Accept-Encoding, X-Requested-With, Content-Type, Origin, Accept, Authenticationtoken");

echo json_encode($data);

И, пожалуйста, попробуйте http access demo.php еще раз.

0 голосов
/ 02 ноября 2018

Вы можете попробовать это таким образом. У меня это работает:

Первый импорт:

import { map } from "rxjs/operators/map";

Ваша функция:

test() {
    let data = "method=getThis" + "&db=myDatabase"
    this.http.post("API URL", data).pipe(
      map(res => res.json())
    ).subscribe(response => {
      //Here your code
      // 'response' is json
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...