Ionic 4 POST на PHP-сервер

Я пытаюсь отправить данные POST на серверную часть 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.info(this.items);
      this.allData = JSON.parse(this.items); // parse json data and pass json string
      // console.info(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.info(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.

this.allData = "method = getThis & db = myDatabase" будет быстрым, но ленивым способом, который, вероятно, сработает.

John V. 02.11.2018 07:31

@JohnV. хахахаха .. к сожалению не получилось ..

Shadheeskumar Thinakaran 02.11.2018 07:34

О, я неправильно понял. Похоже, что результатом будет объект с ключом «результат», и это будет массив. Вы должны попробовать this.allData = data.result

John V. 02.11.2018 07:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
2 666
3

Ответы 3

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

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

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

res.json () не будет работать в ionic 3 и 4 .. (насколько я пытался) .. если я не ошибаюсь, потому что он возвращает json по умолчанию, поэтому нет необходимости снова использовать res.json .. в любом случае, какая версия ионных вы работаете ??

Shadheeskumar Thinakaran 02.11.2018 07:29

Я использую 4.1.1, и она у меня работает. Вот кусок кода, который отлично работает в 4.1.1: `` this.http.post ("локальный: 8080 / sql / получить", data) .pipe (map (res => res.json ())) .subscribe (response => {console.info ("ПОЛУЧИТЬ ДАННЫЕ ИЗ SQL:"); console.info (ответ); console.info (response [4] .Name); //this.loginField = response [4] .Name; // this. passwordField = ответ [4] .Password;}); `` ''

Jonathan 02.11.2018 07:35

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

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

this.http.post("API URL", data, httpOptions).subscribe()

this.http, откуда я взял это (http)

karan brahmaxatriya 14.12.2019 08:02

Это нужно будет импортировать в конкретный файл как такой import { HttpClient } from '@angular/common/http'; Затем добавьте его в конструктор как таковой constructor ( public http: HttpClient )

Delwyn Pinto 19.12.2019 15:23

Сторона 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-доступ к demo.php.

Другие вопросы по теме