2016-02-10 24 views
6

Tôi cố gắng để gửi dữ liệu từ góc 2 đến php:bài JSON từ góc 2 để php

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); 
}); 

Trong góc 2 người duy nhất có thể đăng bài chuỗi như dữ liệu và không Json? Đó là ok cho tôi nhưng tôi đấu tranh để có được những dữ liệu được đăng trên php. Tôi cố gắng $obj = $_POST['order'];

+1

PHP hy vọng bài dữ liệu được trong 'key = cặp giá trị' khi đó là xây dựng $ _POST. bạn đã không gửi nó, bạn đã gửi một chuỗi json thô, về cơ bản chỉ là thành phần 'value'. vì không có 'khóa', php không thể đặt bất cứ thứ gì vào' $ _POST', bởi vì một mục mảng phải có một khóa. bạn có thể lấy json bằng cách đọc từ 'php: // input'. –

Trả lời

8

Marc B là đúng, tuy nhiên những gì đang xảy ra là mảng $ _POST sẽ chứa một giá trị rỗng với một bộ chìa khóa dẫn đến chuỗi JSON bạn đang đi qua ...

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

Bạn " có thể" lấy đó (mặc dù điều này sẽ là cách tiếp cận sai) bằng cách sử dụng phím ...

key($_POST) 

ví dụ:

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

NHƯNG những gì bạn có thể làm là gửi dữ liệu như giá trị cặp khóa:

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); 
}); 

Sau đó trong PHP bạn có thể lấy dữ liệu sử dụng:

$_POST['order'] 

Vài điều cần lưu ý:

  • thay đổi tiêu đề Content-Type thành ứng dụng/x-www-form-urlencoded (nhiều hơn cho thử nghiệm của riêng tôi vì điều này không thực hiện bất kỳ yêu cầu preflight nào)
  • thông báo rằng trật tự là một chuỗi cặp giá trị key thay vì JSON
  • thông báo rằng trật tự trong this.http.post được nhận được thông qua như nó vốn có mà không JSON.stringify
+0

Cảm ơn bạn đã làm việc cho tôi :) 4 giờ tìm kiếm cuối cùng :) – Jestin

+0

@inki: let order = 'order = foobar'; gửi một dữ liệu. Bạn có thể vui lòng giúp tôi gửi nhiều dữ liệu không. Bạn có thể vui lòng cho tôi cú pháp không. –

+2

@GreenComputers làm điều đó như = 'order = foobar & anotherkey = anothervalue & key3 = value3' Tách các biến của bạn bằng & ký –

3

tôi làm không biết nếu đó là thực hành xấu, nhưng nó có vẻ đúng với tôi, mặc dù nó làm phiền tôi một chút

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)) 

Và trong php

$post = json_decode($_POST['data']); 
Các vấn đề liên quan