2015-10-08 18 views
9

Tôi là người mới sử dụng Laravel và tôi đang chuyển đổi ứng dụng php/jquery sang Laravel. Mã ban đầu đã sử dụng một mảng JSON có POST ajax, được truy xuất như sau:

$json = file_get_contents('php://input'); 
$data = json_decode($json,true); 

Tôi đang làm điều tương tự ở phía POST, nhưng tôi không thấy bất kỳ dữ liệu nào đi qua trong Bộ sưu tập yêu cầu Laravel $. Có một cái gì đó đặc biệt mà tôi cần phải làm gì để lấy dữ liệu JSON có cấu trúc như thế này:

[ 
    { "name": "John", "location": "Boston" }, 
    { "name": "Dave", "location": "Lancaster" } 
] 

Dưới đây là jQuery đang ajax POST của tôi (với các dữ liệu được mã hóa cứng)

$.ajax({ 
    type: "POST", 
    url: "/people", 
    data: '[{ "name": "John", "location": "Boston" }, { "name": "Dave", "location": "Lancaster" }]', 
    dataType: "json", 
    success:function(data) { 
     $('#save_message').html(data.message); 
    } 
}); 

Đây là mã trong tôi điều khiển tiếp nhận POST

public function store(Request $request) 
{ 
    dd($request->all()); 
} 

Nhưng tất cả tôi nhận được là:

[]

Bất kỳ ý tưởng nào về cách tôi có thể truy xuất dữ liệu của mình?

Trả lời

11

Bạn cần thay đổi cuộc gọi Ajax của bạn để

$.ajax({ 
    type: "POST", 
    url: "/people", 
    data: '[{ "name": "John", "location": "Boston" }, { "name": "Dave", "location": "Lancaster" }]', 
    contentType: "json", 
    processData: false, 
    success:function(data) { 
     $('#save_message').html(data.message); 
    } 
}); 

thay đổi các dataType-contentType và thêm tùy chọn processData.

Để lấy lại tải trọng JSON từ điều khiển của bạn, sử dụng:

dd(json_decode($request->getContent(), true)); 

thay vì

dd($request->all()); 
+1

Đáng buồn thay, tôi vẫn không nhận được bất kỳ dữ liệu nào trong Bộ điều khiển Laravel của tôi - chỉ cần []. Tuy nhiên tôi có thể thấy rằng các tiêu đề thay đổi từ ** Dữ liệu biểu mẫu ** thành ** Yêu cầu tải trọng ** – Adam

+1

Tôi đã cập nhật phản hồi của mình, bạn cũng cần phải thay đổi cách bạn nhận đầu vào trong bộ điều khiển. –

+0

Tôi đã học được điều gì đó mới mẻ về yêu cầu –

10
$postbody=''; 
// Check for presence of a body in the request 
if (count($request->json()->all())) { 
    $postbody = $request->json()->all(); 
} 

Đây là cách nó được thực hiện trong laravel 5.2 bây giờ.

Các vấn đề liên quan