Я пытаюсь отправить данные 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.
@JohnV. хахахаха .. к сожалению не получилось ..
О, я неправильно понял. Похоже, что результатом будет объект с ключом «результат», и это будет массив. Вы должны попробовать this.allData = data.result






Вы можете попробовать это так. Меня устраивает:
Первый импорт:
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 .. в любом случае, какая версия ионных вы работаете ??
Я использую 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;}); `` ''
Поскольку данные, которые вы отправляете, представлены в виде обычного текста, вам нужно будет добавить заголовок с указанием типа содержимого.
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)
Это нужно будет импортировать в конкретный файл как такой import { HttpClient } from '@angular/common/http'; Затем добавьте его в конструктор как таковой constructor ( public http: HttpClient )
Сторона 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.
this.allData = "method = getThis & db = myDatabase" будет быстрым, но ленивым способом, который, вероятно, сработает.