2016-02-10 27 views
6

Ich versuche, PHP-Daten von Winkeln 2 bis php zu schreiben:Beitrag JSON von Winkel 2

let headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 
var order = {'order': this.orders}; 

this.http.post('http://myserver/processorder.php', JSON.stringify(order), { 
    headers: headers 
}).subscribe(res => { 
    console.log('post result %o', res); 
}); 

In Winkel 2 kann man nur String als Daten posten und nicht Json? Das ist in Ordnung für mich, aber ich habe Mühe, die geposteten Daten auf PHP zu bekommen. Ich habe versucht, $obj = $_POST['order'];

+1

PHP erwartet post-Daten in 'key = value' Paare sein, wenn es $ _POST Gebäude ist. Sie nicht gesendet, dass Sie eine rohe json Zeichenfolge gesendet, die im Grunde nur Bestandteil der 'value' ist. da es keine 'key' ist, kann PHP nichts in' $ _POST' setzen, weil ein Array Element einen Schlüssel haben muss. Sie könnten den JSON wahrscheinlich durch Lesen von 'php: // input' abrufen. –

Antwort

8

Marc B richtig ist, aber was passiert, ist, dass der $ _POST Array einen leeren Wert mit einem Schlüssel auf den JSON-String enthalten Sie vorbei ...

Array 
(
    [{"order":"foobar"}] => 
) 

You " kann“, dass greifen durch (obwohl dies den falschen Ansatz wäre) mit dem Schlüssel bekommen ...

key($_POST) 

zum Beispiel:

$obj = json_decode(key($_POST)); 
echo $obj->order; 

ABER, was Sie tun können, ist, die Daten als Wert Schlüsselpaare senden:

let headers = new Headers(); 
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 
let order = 'order=foobar'; 

this.http.post('http://myserver/processorder.php', order, { 
    headers: headers 
}).subscribe(res => { 
    console.log('post result %o', res); 
}); 

dann in PHP können Sie die Daten greifen mit:

$_POST['order'] 

Ein paar Dinge zu beachten:

  • geändert Header Content-Type auf application/x-www-form-urlencoded (mehr für da dies meine eigenen Tests haben keine Preflight-Anfragen nicht tun)
  • Hinweis, dass um ein Schlüsselwertpaar Zeichenfolge anstelle von JSON ist
  • Hinweis, dass um in this.http.post hindurchgeführt zu werden, ohne JSON.stringify wie besehen
+0

Vielen Dank es hat für mich funktioniert :) 4 Stunden Suche endlich :) – Jestin

+0

@inki: let order = 'order = foobar'; sendet eine Daten. Können Sie mir bitte helfen, mehrere Daten zu senden? Kannst du mir bitte Syntax geben? –

+2

@GreenComputers tun es wie = 'bestellen = foobar & anotherkey = anothervalue & key3 = value3' Trennen Sie Ihre Variablen mit & sign –

3

ich tun weiß nicht, ob es eine schlechte Praxis ist, aber es scheint mir richtig, obwohl es mich ein wenig stört

const headers = new Headers(); 
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); 

const obj = { nome: 'gabriel', age: 20 }; 
const body = 'data=' + JSON.stringify(obj); 

this.http.post('/test.php', body, { headers }) 
    .subscribe(res => console.log(res.json()), res => console.error(res)) 

Und in PHP

$post = json_decode($_POST['data']);