Отправка данных JSON на сервер через HTTP POST в Ionic 4 не работает. [Примечание: попытка получить свойство не-объекта] - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь отправить http-запрос через http-пост в Ionic 4 на свой PHP-сервер через URL http://myexamplehost#1.com/api, и он возвращает мне Notice : trying to get property of non object....

Когда я отправляю свои данные json через URL http://myexamplehost#1.com/api через почтальона, все работает просто отлично. Я предполагаю, что мои данные JSON, отправленные через http пост в Ionic 4, как-то не так.

Поэтому я пытаюсь отправить свои данные json через другой URL-адрес https://myexamplehost#2.com/api через http-пост в Ionic 4, и вот, он работает просто отлично.

Вот что json я отправил через почтальона:

{
  "id": "",
  "date": "2019-09-09",
  "name": "jason"
}

А вот что я отправил через http пост в Ionic 4 page.ts:

  mydata: Idata = {
    id:string;
    date:string;
    name:string
  }

   saveData(){
     this.dk.insertData(this.mydata).subscribe((result:any)=>{
       console.log(result['_body']);
     });

  }

Вот как выглядит сервисный метод:

insertData(data:Idata){
    return this.http.post(this.configUrl+'?ins=true',data,{
      headers: { 'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT'
    }
    });

Вот как выглядит серверная часть:

if (isset($_SERVER['HTTP_ORIGIN'])) {
        header("Access-Control-Allow-Origin: *");
        header('Access-Control-Allow-Credentials: true');
        header('Access-Control-Max-Age: 86400');    // cache for 1 day
    }

    // Access-Control headers are received during OPTIONS requests
    if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
            header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

        if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
            header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

        exit(0);
    }

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
    print_r(json_encode($request));
//    echo json_encode($request->name."-".$request->date);
//    echo json_encode($request->tgl);
    $result = $obj->insData("example_tb","null,'".date('Y-m-d',strtotime($request->date))."','".$request->name."'");

Так что я действительно хочу знать, это проблемы с CORS или проблемы с кодом в моей ситуации? Потому что я получаю сообщение об ошибке origin has been blocked by CORS policy в консоли, хотя. Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Я хотел бы указать, что Access-Control-Request-Method - это заголовок запроса, который задается браузером на предварительных запросах CORS и может иметь только одно значение.

Где Access-Control-Allow-Methods - это заголовок ответа CORS, возвращаемый бэкэндом.

Заменить

'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT'

С

'Access-Control-Request-Method': 'POST'
0 голосов
/ 19 мая 2019

Ниже код работает для Ionic 4.

app.module.ts Импортировать HttpClientModule

import { HttpClientModule } from '@angular/common/http';

Добавление HttpClientModule к импорту.

@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [HttpClientModule],

Теперь на другой странице. Мой ucak.page.ts

import { HttpClient } from '@angular/common/http';
constructor(public http: HttpClient) {}

SendDataFu(){

     var headers = new Headers();
     headers.append("Accept", 'application/json');
     headers.append('Content-Type', 'application/json' );


     let postData =  {
      user: "doctoravatar@yahoo.com",
      t: "vlIj",
      zip: 94089,
      forecast: 7
  }

     this.http.post("https://json.penzance.org/request", postData,{observe: 'response'})
       .subscribe(data => {
         console.log(data);

        }, error => {
         console.log(error);
       });

   }
...