2016-07-26 20 views
0

json(1.12.4)の$ .ajaxメソッドを使用して、symfony2コントローラにjsonデータを送信しようとしています。

私のjavascript:

  var category_type = 2; 
     var json_data = JSON.stringify(category_type); 

     $.ajax({ 
      type: "POST", 
      url: Routing.generate('homepage'), 
      contentType: 'application/json', 
      dataType: "json", 
      data: json_data, 
      beforeSend: function (xhr){ 
       xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
      }, 
      success: function (result, status, xhr) { 
       console.log(result); 
       console.log(status); 
      }, 
      error: function(xhr, status, error) { 
       console.log(error); 
       console.log(status); 
      } 
     }); 

マイコントローラ:

/** 
* @Route("/", name="homepage", options={"expose"=true}) 
*/ 
public function indexAction(Request $request) { 

    if($request->isXmlHttpRequest()){ 
     $content = $this->get("request")->getContent(); 
     $cat = json_decode($content, true); 
     var_dump($content); 
     exit; 
    } 
    else { 
     echo 'Sorry!'; 
     exit; 
    } 

は、しかし、私はメッセージを取得申し訳ありません!毎回。今私はxhr: setRequestHeader("X-Requested-With","XMLHttpRequest"),を正しく使用したかどうかはわかりません。しかしそれがなければ私は同じ結果を得る。

if/elseの条件を削除してみましたが、$content = $this->get("request")->getContent();を試しました。しかし、私がvar_dump($content);をすると、空の文字列ieが得られます。 string '' (length=0)

質問:

  1. なぜ$request->isXmlHttpRequest()リターンfalseしていますか?
  2. リクエストヘッダを設定するにはどうすればよいですか?
  3. jsonデータをサーバーに送信する正しい方法ですか($.ajax)?
  4. コントローラでデータを受信する正しい方法ですか($this->get("request")->getContent();)?

    data: { json_data } 
    

    の代わり:

+0

あなたがしようとしたことがあり:6 =>

EDIT

この単純な呼び出しを行うことを試してみて、それが動作するかどうかあなたは自分自身のデータでこれを再現するために持っている)、それを使用するdocを見ます'xhr:setRequestHeader(" X-Requested-With "、" XMLHttpRequest ")'私は通常、クライアントサイドには何も指定しません.... – Matteo

+0

@Matteoはい、あります。しかし、私は同じ結果を得る。 – utkarsh2k2

+0

@Matteoはこの投稿の2番目の答えをチェックします。http://stackoverflow.com/questions/4658789/symfony-request-isxmlhttprequest-issue – utkarsh2k2

答えて

1

は、あなたのAJAX呼び出しでそれを試してみてください

data: json_data 

そして、あなたは要求からPOSTデータを見たい場合は、この操作を行う必要があります:

dump($request->request); 

=>dump関数を使用することをお勧めします(SF 2。

var data = {"name":"John Doe"} 
$.ajax({ 
    dataType : "json", 
    contentType: "application/json; charset=utf-8", 
    data : JSON.stringify(data), 
    success : function(result) { 
     alert(result.success); // result is an object which is created from the returned JSON 
    }, 
}); 
+0

私は 'data:{json_data}'を試しましたが、成功コールバック 'success:function(result、status、xhr){alert(result);}'はヌル値を返します – utkarsh2k2

+0

'console.log'あなたの" json_data "それは空ではないと呼んでいますか?あなたのコントローラでは 'dump($ request-> request); exit;' – DOZ

+0

もこれを試しました。結果は '34行目のDefaultController.phpです: ParameterBag {#9▼ #パラメータ:[] } – utkarsh2k2

関連する問題