2016-12-15 3 views
4

Я пытаюсь воссоздать Post JSON from angular 2 to php, но он не работает, поскольку нет ничего в переменной $_REQUEST на PHP сторонеКак разместить объект JSON с Http.post (Угловое 2) (на стороне сервера 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?

Edit:

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

+0

Вы можете избавиться от параметров запроса. Это бесполезно. То, что вы используете, уже по умолчанию. Я не использую php, но уверены ли вы, что это не просто проблема php? У вас такой угловой код. Возможно, вы хотите опубликовать php-вопрос. –

+0

nope, php отлично работает, поскольку, если я использую jQuery Ajax, он возвращает результаты, как ожидалось. И я справился с предыдущим ответом (который вы были частью) см. ... http://stackoverflow.com/questions/41135595/using-json-objects-in-urlsearchparams/41135641?noredirect=1#comment69475362_41135641 , Хотя, если у кого-то есть лучший ответ, я просто оставлю это здесь. –

+0

Если вы говорите об этом jquery (http://stackoverflow.com/q/41132472/2587435), это не отправляет JSON. Тип данных по умолчанию для jquery - application/x-www-form-urlencded, если вы не настроите его для JSON.Google, как отправить JSON с jquery, а затем сделайте это. Я уверен, что это тоже не удастся, если этот угловой код не сработает. Тогда Google, как принять JSON с php –

ответ

4

угловые 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 декодирования для значений, которые вы получаете в настройках.

+0

Я знаю, как это сделать с помощью метода 'get' с вопросительным знаком. Просто нужно знать, как это сделать для формата JSON. –

+1

можете попробовать $ str_json = file_get_contents ('php: // input'); на стороне сервера php. Это считывает необработанные данные POST. он может работать в вашем случае. прочитайте об этом. –

+1

'php: // input' работал –

1

С угловым кодом, похоже, что-то не так. Проблема в том, что 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) 
+0

Да, это, вероятно, сторона php, вы знаете что-нибудь о ожидании json-формата? –

+0

Ум довольно невежественный с PHP. Удалите тег PHP на вопрос, хотя и вы можете привлечь правильных экспертов. – Mitch

Смежные вопросы