Intereting Posts
Как отключить подсказку браузера, чтобы запомнить пароль Установка груши для macports PHP5 Magento, пользовательский список продуктов Разбор команды командной строки php, howto PHP – импортировать CSV-файл в базу данных mysql. Используя LOAD DATA INFILE Как на PHP-стороне проверить правильность URL-адреса веб-сайта? Неправильная ориентация Jcrop от загрузки Iphone, как я могу это сделать? Yii Postgress Json запрашивает оператора с вопросительными знаками?,? |,? & Использование точки вместо запятой при отображении десятичного числа Получение XMLReader PHP для того, чтобы не вызывать ошибки php в недопустимых документах Как вручную интерполировать строку? Получение определенного значения из Serialized Array MySQL Функция переадресации Laravel 5 Акцентированные символы, не показывающие при использовании imagettftext с otf, но показывающие с ttf Каковы наилучшие практики для самообновления приложений PHP + MySQL?

Как отправить объект json с помощью Http.post (Angular 2) (сторона php-сервера)

Я пытаюсь воссоздать Post JSON с углового 2 на php, но он не работает, поскольку в переменной $_REQUEST нет ничего на стороне php

Код:

 searchHttp({body}: any): Promise<any> { let headers = new Headers ({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers, method: "post" }); let test_this = {"search": "person"}; return this.http.post(this.post_url, JSON.stringify(test_this), options) .toPromise() .then(response => { return response.text(); }) .catch(this.handleError); } 

Есть что-то, что мне не хватает? Я знаю, что сообщения работают с другим форматом, потому что у меня есть ответ на другой вопрос.

Кроме того, http.request лучше, чем http.post ?

Редактировать:

После долгих консультаций с экспертами по Angular / Javascript они считают, что это проблема php. Поэтому с радостью будет приветствоваться любой, кто знает, как принимать объекты JSON на стороне php.

угловая 2 сторона клиента

  ngOnInit() { let body=Api+'product.php'+'?id=' + this.link_id; this._callservice.callregister(body) .subscribe( data => { this.outputs=data; }, error => console.log("Error HTTP Post"), () => console.log("completed") ); } } 

call.service.ts

 import {Injectable} from '@angular/core'; import {Router} from '@angular/router'; import {Http, Response, Headers, RequestOptions} from '@angular/http'; import {Observable} from 'rxjs/Observable'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observable/throw'; @Injectable() export class AuthenticationService { constructor(private _http:Http){} postregister(api:any){ // console.log(api); let headers = new Headers({'Content-Type':'application/x-www-form-urlencoded'}); let options = new RequestOptions({ headers: headers, method: "post"}); return this._http.get(api,options) .map(res => res.json()) .catch(this.handleError); } private handleError (error: Response) { console.error(error); return Observable.throw(error.json().error || ' error'); } } 

На стороне сервера PHP убедитесь, что на стороне сервера у вас есть три строки в php-коде.

  header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: X-Requested-With'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 

Файл Php:

  <?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: X-Requested-With'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); $servername = "localhost"; $username1 = "root"; $password = "root"; $dbname = "product"; $e=array("error"=>1,"message"=>"Account Already Exists"); $accountCreated = array( "error" =>0, "data" => array( "username" => "amit" , "password" => "anypassword", "role"=> "user", "id" => "anyid" ) ); // Create connection $conn = mysqli_connect($servername, $username1, $password, $dbname); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } $username = $_GET["username"]; $Pass = $_GET["password"]; $role= $_GET["role"]; $sql="SELECT COUNT(*) as user FROM users WHERE username = '$username'"; $result = mysqli_query($conn,$sql); $line = mysqli_fetch_assoc($result); $count = $line['user']; if($count!=0) { echo json_encode($e); } else { $sql="INSERT INTO users(username,password,role)VALUES('$username','$Pass','$role')"; $result=mysqli_query($conn,$sql); $sql="select * from users where username ='$username'"; $result=mysqli_query($conn,$sql); $line=mysqli_fetch_assoc($result); { $accountCreated['data']['username']=$line['username']; $accountCreated['data']['password']=$line['password']; $accountCreated['data']['role']=$line['role']; $accountCreated['data']['id']=$line['id']; } echo json_encode($accountCreated); } ?> 

Я надеюсь, что это сработает для вас. Для json я предполагаю, что вы должны передать как опции и использовать json decode для значений, которые вы получаете в опциях.

Кажется, что не что-то не так с Угловым кодом. Проблема в том, что PHP ожидает получить. Я не эксперт по PHP, но, как вы уже упоминали, он отлично работает с jQuery, то это указывает на то, что ваш PHP ожидает значение, закодированное в URL (как работает jQuery), а не значение JSON.

Другими словами, сервер пытается разобрать:

 search=person 

То, что вы отправляете, это:

 { "search": "person" } 

Попробуйте что-то более похожее на следующее, чтобы отправить его в желаемом формате:

 let test_this = { "search": "person" }; let headers = new Headers ({ 'Content-Type': 'application/x-www-form-urlencoded' }); let options = new RequestOptions({ headers: headers, method: "post" }); http.post(this.post_url, test_this, options)