2012-03-15 57 views
5

我目前正在開發一個基於symfony2的項目,其中包含大量的ajax用法。如何在symfony2中接收JSON

現在我想通過$.ajax();(POST類型)發送JSON並在symfony2控制器中處理它。 但我不太清楚我如何訪問控制器內的JSON。

現在我已經得到了以下內容:

JS:

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

而且PHP:

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

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

我不知道的唯一的事情是我如何可以訪問JSON? 我相信這很容易,我只是沒有看到它。 感謝您的幫助!

+1

你應該看看FOSRestBundle:https://github.com/FriendsOfSymfony/FOSRestBundle – igorw 2012-03-15 22:14:39

回答

3

你的代碼,我認爲不完整的,如果你想將數據發送到用JSON格式我想設置$就這樣,只是例子

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

附加參數JSONFile或服務器不管你想要什麼。你可以使用json解碼來從客戶端檢索json。

這是PHP代碼:

$json = $_POST['JSONFile']; 

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

在Symfony2的控制器直接ACCES $_POST是壞的,所以使用要求 $request = $this->getRequest(); $request->request->get('JSONFile'); // get a $_POST parameter

+5

這枚作品並且不復雜,直接訪問'$ _POST'並不是一個用Symfony 2來完成的好方法.JBinfo的答案要好得多。 – chiborg 2012-03-15 13:26:12

+0

是我的代碼只是在PHP中的例子,在Sysmfony 2也許獲取參數和喜歡高安全性,將是不同的情況。獲取參數,你可以使用'$ request-> request-> get('JSONFile'); //獲取$ _POST參數' – viyancs 2012-03-15 13:30:06

+1

我正在更新我的答案。 – viyancs 2012-03-15 13:36:59

13

在Ajax請求ü必須將內容類型設置爲application/JSON :

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

並在您的控制器中使用這解析內容:

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

更多信息,看看這個食譜的Silex http://silex.sensiolabs.org/doc/cookbook/json_request_body.html

+0

它是'$ request-> request-> replace(is_array($ data)?$ data:array());' 請參閱api [here](http://api.symfony.com/3.1/Symfony/Component /HttpFoundation/Request.html)用於$ request對象上的方法。 – cpxPratik 2017-04-25 13:52:28