2012-03-15 24 views
5

Tôi hiện đang làm việc trên một dự án dựa trên symfony2 với rất nhiều cách sử dụng ajax.Làm cách nào để nhận được JSON trong symfony2

Bây giờ tôi muốn gửi JSON qua $.ajax(); (loại POST) và xử lý nó trong bộ điều khiển symfony2. Nhưng tôi không hoàn toàn chắc chắn làm thế nào tôi truy cập vào JSON bên trong bộ điều khiển.

Ngay bây giờ tôi đã có những điều sau đây:

JS:

  $.ajax({ 
       url: url, 
       type:"POST", 
       data:json, 
       success:function (data) { 
        $('div.tooltip p').html(data); 
       } 
      }); 

Và PHP:

public function registrationAction(Request $request) { 
     if($request->getMethod() == 'POST') { 
      // How to receive?? 
     } 

     return $this->render('KnowHowERegistrationBackendBundle:Create:registration.html.twig'); 
} 

Điều duy nhất tôi không biết là làm thế nào tôi có thể truy cập JSON? Tôi chắc chắn nó khá dễ dàng Tôi chỉ không nhìn thấy nó. Cảm ơn sự giúp đỡ của bạn!

+1

Bạn nên có một cái nhìn tại FOSRestBundle: https://github.com/FriendsOfSymfony/FOSRestBundle – igorw

Trả lời

3

mã của bạn tôi nghĩ rằng chưa hoàn chỉnh, nếu bạn muốn gửi dữ liệu đến máy chủ với định dạng json tôi nghĩ rằng việc thiết lập $ .ajax như thế này, chỉ là ví dụ

$.ajax({ 
       url: url, 
       type:"POST", 
       data:"JSONFile=" + json, 
       success:function (data) { 
        $('div.tooltip p').html(data); 
       } 
      }); 

add tham số JSONFile hoặc bất cứ điều gì làm bạn muốn và bạn có thể sử dụng giải mã json để lấy lại json từ máy khách.

đây là mã trong php:

$json = $_POST['JSONFile']; 

var_dump(json_decode($json)); 
var_dump(json_decode($json, true)); //true option if you will convert to array 

trong điều khiển symfony2 acces trực tiếp $_POST là xấu nên sử dụng yêu cầu $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

+5

Trong khi tác phẩm này và không biến chứng, truy cập trực tiếp '$ _POST' không phải là cách hay để làm điều đó với Symfony 2. Câu trả lời từ jBinfo tốt hơn nhiều. – chiborg

+0

yup mã của tôi chỉ là ví dụ trong php, trong Sysmfony 2 có thể để có được các thông số và thích an ninh cao sẽ là trường hợp khác nhau. để lấy tham số, bạn có thể sử dụng '$ request-> request-> get ('JSONFile'); // nhận thông số $ _POST' – viyancs

+1

Tôi đang cập nhật câu trả lời của mình. – viyancs

13

trong yêu cầu ajax của bạn u phải thiết lập các kiểu nội dung để application/json :

$.ajax({ 
     url: url, 
     type:"POST", 
     contentType: 'application/json', 
     data:json, 
     success:function (data) { 
      $('div.tooltip p').html(data); 
     } 
}); 

và sử dụng bộ điều khiển của bạn này để phân tích các nội dung:

if($request->getMethod() == 'POST') { 
    if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { 
     $data = json_decode($request->getContent(), true); 
     $request->replace(is_array($data) ? $data : array()); 
    } 
} 

để biết thêm thông tin xem sách dạy nấu ăn này silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

+0

Đó là '$ request-> request-> replace (is_array ($ data)? $ Data: array());' Xem api [ở đây] (http://api.symfony.com/3.1/Symfony/Component /HttpFoundation/Request.html) cho các phương thức được sử dụng trên đối tượng $ request. – cpxPratik

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