2013-04-27 17 views
11

私は実際にajaxリクエストから投稿データを処理する方法を理解していません。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() 

$コンテンツは、URLパラメータ文字列であるこれは私のjavascriptのです。 は、なぜ私は正常にデータを得ることはありません:

$request->get('title') 

jqueryのAjaxのmethdでポストデータを処理するための正しい方法は何ですか?

ありがとうございました。

EDITだから、

、私は次の問題を発見:

私の現在のプロジェクトでは、要求が次のようになります。

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

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

データが要求されますPayloadをリクエストしていますが、わかりませんなぜ。クリーンプロジェクトで

要求は次のようになります。私のプロジェクトで

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オブジェクトをJSON.stringifyを使用してコントローラに渡すことができます。

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

そして、この通常のワークフローのですか?私は、Ajaxのmehtodが単独でそれを処理すると思った? –

+0

はい、$ .ajaxはデータをJSONにシリアル化しないためです。 – anazimok

+0

しかし、なぜ私は通常の要求メソッドを使用できないのですか?私は$ request-> getContent()経由でデータを取得します。 –

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オブジェクトを作成すると役立つかもしれませんが、あなたがやっているやり方は私にはうまく感じられます。私もこれをしました。

EDIT

通常あなたもこれを行うことにより、要求内のすべてのデータにアクセスできます。

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

何かがそこにある場合たぶん、あなたはその後、var_dump()変数を参照することができます。

+0

コンテンツは次のような文字列でした:title = sadfsdf&description =&questions%5B357147573695183%​​5D%5Bquestion%5D = sdfas&questions%5B357147573695183%​​5D%5Bdescription%5D =&questions%5B357147573695183%​​5D %5Bオプション%5D =虚偽と質問%5B357147573695183%​​5D%5Bqtype%5D = 1&questions%5B357147573695183%​​5D%5Bsort%5D = 1&questions%5B357147573695183%​​5D%5Bid%5D = 357147573695183&question%5B357147573695183%​​5D%5Binput%5D%5B%5D = fsdfasdf&questions %5B357147573695183%​​5D%の5Binput%5D%の5B%の5D = safsdf&質問%5B357147573695183%​​5D%5Bvalid%5D =真&質問%5B357147573695183%​​の5D%5Badd%5D =真&pollid = –

+1

$要求 - >要求 - >すべての();空だった。 getContent()だけがデータを取得します。私は、URLの部分にデータを追加すると、すべての問題はありません。投稿データが非常に大きくなる可能性があるため、データパラメータを使用してデータを送信する必要があります。 –

+0

あなたのajaxメソッドはどのように見えますか? –

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

は私のためには機能しません。理由を理解していない。 –

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

    });  
}); 

コントローラでは、通常のリクエストとして使用できます。

関連する問題