Я пытаюсь отправить данные в бэкэнд 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.
Вы можете попробовать это таким образом. Меня устраивает:
Первый импорт:
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
});
}
Поскольку данные, которые вы отправляете, представлены в виде простого текста, вам необходимо добавить заголовок с указанием типа контента.
import { HttpHeaders } from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'text/html'
})
};
this.http.post("API URL", data, httpOptions).subscribe()
Сторона 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 снова.