2017-09-01 3 views
0

Ich habe versucht, dies für fast einen Tag herauszufinden, ohne Glück. Ich habe eine einfache http.post Anfrage:Angular2 http.post sendet keine JSON-Daten an API

import { Component } from '@angular/core'; 
    import { Http, Response, Headers, RequestOptions } from '@angular/http'; 
    import 'rxjs/add/operator/toPromise'; 

    @Component({ 
    selector: 'SendPost', 
    }) 
    export class SendPostComponent { 

    constructor(
     private http:Http, 
    ) {} 

    private urlPost:string = 'www.mydomain.com/api/order.php' 

    private addToBasket() { 
     var data = { 
     foo: "bar", 
     foo1: "another" 
     } 
     var postData = JSON.stringify(data); 

     let headers = new Headers({'Content-Type': 'application/json'}); //x-www-form-urlencoded 
     headers.append('Access-Control-Allow-Methods', "GET, POST, OPTIONS"); 
     let options = new RequestOptions({ headers: headers }); 

     this.http.post(
      this.urlPost, 
      postData, 
      options 
     ) 
     .toPromise() 
       .then((res) => {this.extractData(res)}); 
    }  

    private extractData(res: Response) { 
     console.log('extractData:', res); 
    } 

    } 

ich den API-Endpunkt absolutes Minimum gestreift: keine .htacces, sondern nur die PHP-Datei diesen einfache Code:

<?php print_r(json_encode($_REQUEST)); die; ?> 

Ich halte ein leeres Array immer in Rückkehr. Wenn ich jedoch den Code wie folgt ändere:

var data2 = 'foo=bar&foo1=another' 
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 

Dann die $ _REQUEST Objekte bekommt meine Daten. Was vermisse ich?

+0

Wenn Sie die Ergebnisse mit URL-Parametern erhalten, dann ist es php verwandt, nicht angular verwandt! Ich bin nicht vertraut mit PHP, aber vielleicht sollten Sie es JSON Post-Anfragen zu akzeptieren – trichetriche

+0

'JSON.stringify' wird eine JSON-String zurückgeben, aber was Sie brauchen, ist https://StackOverflow.com/questions/1714786/query-string -Encodierung eines Javascript-Objekts –

Antwort

1

PHP $ _REQUEST ist:

Ein assoziatives Array, dass standardmäßig enthält den Inhalt von $ _GET, $ _POST und $ _COOKIE

und $_POST

eine assoziative Array von Variablen, die über die HTTP-POST-Methode an das aktuelle Skript übergeben werden, wenn Sie in der Anforderung application/x-www-form-urlencoded oder multipart/form-data als HTTP Content-Type verwenden.

PHP kann „application/json“ Daten nicht analysieren, die Abhilfe php wrapper ist, durch „file_get_contents (‚php: // input‘)“ können Sie die Daten aus Anforderungsentität Körper auf diese Weise holen kann:

$body = file_get_contents('php://input'); 
$data = json_decode($body); 
print_r($data); // here is what you need