2013-04-27 120 views
11

我真的不明白如何處理來自ajax請求的發佈數據。這是我的javascript:ajax在symfony2控制器中請求處理數據

$.ajax({ 
    type: "POST", 
    url: Routing.generate('save'), 
    contentType: 'application/json; charset=UTF-8', 
    data: { 
      title: title,     
      description: description, 
      questions: questions,    
     } 
    }); 

讓我的控制器操作中的數據的唯一方法是這樣的:

$content = $request->getContent() 

$內容是一個網址參數字符串。 爲什麼我沒有拿到的數據通常與:

$request->get('title') 

什麼是處理與jQuery AJAX收作方法初探後數據的正確方法是什麼?

非常感謝。

編輯

所以,我發現了以下問題:

在我的當前項目的要求是這樣的:

https://dl.dropboxusercontent.com/u/17861060/false.png

$.ajax({ 
      type: "POST", 
      url: Routing.generate('poll_save'),     
      data: { 
       title: title      
      } 
     }) 

數據請求通過請求負載但我不知道爲什麼。

在清潔項目的要求是這樣的:

https://dl.dropboxusercontent.com/u/17861060/right.png

$.ajax({ 
       type: "POST", 
       url: '{{path('_demo')}}',      
       data: { 
        title: 'title',     
        description: 'description', 
        questions: 'questions', 
        pollid: 1       
       } 
      }) 

任何事情在我的項目是怎麼了。你知道爲什麼通過要求數據請求負載

回答

1

您可以構建您的json對象並使用JSON.stringify將JSON對象傳遞給您的控制器。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON/stringify

var obj = { 
     title: title,     
     description: description, 
     questions: questions    
}; 

$.ajax({ 
type: "POST", 
url: Routing.generate('save'), 
contentType: 'application/json; charset=UTF-8', 
data: JSON.stringify(obj) 
}); 
+0

這是正常的工作流程嗎?我認爲阿賈克斯方法會獨自處理它? – 2013-04-27 14:44:09

+0

是的,因爲$ .ajax不會將數據序列化爲JSON。 – anazimok 2013-04-27 14:49:22

+0

但爲什麼我不能使用普通的請求方法?我只通過$ request-> getContent()獲取數據 – 2013-04-28 21:03:52

9

你使用的請求對象在控制器?

<?php 
namespace Acme\DemoBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
//...other things to use 

class MyController extends Controller 
{ 
    public function handleRequestAction() { 

     $request = $this->get('request'); 
     //request your data 
     $title = $request->get('title'); 
     //or in one line 
     $title = $this->get('request')->request->get('title'); 
    } 
} 
?> 

這是我常用的方法,當我想從ajax調用中獲取數據時。 你可以發佈什麼$內容包含?

我發現像發佈數據一樣沒有問題。構建一個json對象可能會有所幫助,但是你做這件事的方式對我來說似乎很好。我也是這樣做的。

編輯

通常情況下,你也可以訪問所有數據在請求做這個:

$all = $request->request->all(); 

也許你可以再var_dump()變量看,如果事情是在其中。

+0

內容是這樣一個字符串:title = sadfsdf&description =&questions%5BD7147573695183%​​5D%5Bquestion%5D = sdfas&questions%5B357147573695183%​​5D%5Bdescription%5D =&question%5B357147573695183%​​5D %5Boptional%5D =假問題%5B357147573695183%​​5D%5Bqtype%5D = 1&問題%5B357147573695183%​​5D%5Bsort%5D = 1&問題%5B357147573695183%​​5D%5Bid%5D = 357147573695183&問題%5B357147573695183%​​5D%5Binput%5D%5B%5D = fsdfasdf&問題%5B357147573695183%​​5D%5Binput%5D%5B%5D = safsdf&questions%5B357147573695183%​​5D%5Bvalid%5D = true&questions%5B357147573695183%​​5D%5Badd%5D = true&pollid = – 2013-04-27 15:21:49

+1

$ request-> request-> all();也是空的。只有getContent()給了我任何數據。當我將數據添加到url部分時,一切都很好。但我需要通過數據參數發送數據,因爲發佈數據可能非常大。 – 2013-04-27 15:23:05

+0

你的ajax方法是怎樣的? – 2013-04-27 15:24:37

1

測驗 - 表單名稱 連載-populate變量

$.ajax({ 
      url: $("#quiz").attr("action"), 
      data: $("#quiz").serialize(), 
      type: 'POST' 
}); 

$.ajax({ 
       url: $("#commentForm").attr("action"), 
       data: { 
        comment: commentFormID.val() 
       }, 
       type: 'POST' 
}); 

控制器 - 更像是以前的意見建議。

$request = $this->get('request'); 
$usercomment=$request->request->get('parameterName'); 
+0

不適用於我。不明白爲什麼。 – 2013-04-28 18:41:53

0

爲什麼選擇Json?我的意思是要求內容類型JSON?如果沒有,這是我處理Ajax和使用FOSRoutingbundle的方式,我可以看到你正在使用。

$(document).ready(function(){ 
    $('#myForm').submit(function(e){  

     e.preventDefault(); 
     var $form = $(this); 
     var $formPHP = $form.serializeArray(); 
     var $url = Routing.generate('route_to_use'); 

     $.post($url, $formPHP, function(data){ 
     ..... 
     }); 

    });  
}); 

然後在控制器中,您可以使用作爲一個正常的請求。