2016-08-22 16 views
0

私はSymfonyを初めて使っています。私は、Ajax経由でエンティティテーマのすべてのelemetsのリストを取得できますが、回答はまだ "未定義"です。ここでコードテキストが強いです。symfony json ajaxとの応答

VUE

$(document).ready(function() { 
     var $theme = $('#theme'); 
     $theme.append('<option value="">Choisir un thème</option>'); 
     $.ajax({ 
      type: 'post', 
      url: '{{ path('web_site_liste_theme_cmb') }}', 
      dataType: 'json', 
      beforeSend: function() { 
       $('#themediv').append('<div id="loading" style=" float: left; display: block;"><img src="{{ asset('bundles/BackBundle/img/loadingicon.gif') }}"/></div>'); 
      }, 
      success: function (json) { 
       {#$('#theme').append({{ dump(json)}});#} 
       console.log(json.value); 
       $.each(json, function (index, value) { 

        //console.log(value); 
        $('#theme').append('<option value="' + value.id + '">' + value.name + '</option>'); 
        $('#loading').remove(); 
       }); 
      } 
     }); 
    }); 

コントローラ

public function ListeThemeAction(Request $request) 
{ 

    $em = $this->getDoctrine()->getEntityManager(); 
    if ($request->isXmlHttpRequest()) { 
     $themes = $em->getRepository('WebSiteBackBundle:theme'); 
     $themes = $themes->findAll(); 
     //var_dump($themes); 

     return new JsonResponse($json); 
    } 
    return new JsonResponse('no results found', Response::HTTP_NOT_FOUND); // constant for 404 

} 

サーバーの再sponseは、私は、データベース内のデータの同じ番号を持っていますが、私は

値オブジェクトを読み、ここにあることができない、200 OK、すべてが動作しているようです: console.log(json)

+0

いくつかの移動情報を提供できますか?サーバーからの応答は何ですか? 「未定義」とは何ですか? "json.value"? – carmel

+0

サーバーの応答は200です。すべてが動作しているようですが、データベースのデータは同じですが、オブジェクトの値は読み取れません。 –

答えて

0

私は答えを見つけました。コントローラーを変えなければならなかったのです。 ありがとうYonel!ここ は、それが誰かを助けることを望ん

 $(document).ready(function() { 
     var $theme = $('#theme'); 
     $theme.append('<option value="">Choisir un thème</option>'); 
     $.ajax({ 
      type: 'post', 
      url: '{{ path('web_site_liste_theme_cmb') }}', 
      dataType: 'json', 
      beforeSend: function() { 
       $('#themediv').append('<div id="loading" style=" float: left; display: block;"><img src="{{ asset('bundles/BackBundle/img/loadingicon.gif') }}"/></div>'); 
      }, 
      success: function (json) { 

       console.log(json); 
       $.each(json, function (index, value) { 

        //console.log(value); 
        $('#theme').append('<option value="' + value[0]+ '">' + value[1] + '</option>'); 
        $('#loading').remove(); 
       }); 
      } 
     }); 
    }); 

VueのくれJson in controller

コントローラ

public function ListeThemeAction(Request $request) 
{ 
$output=array(); 
    $em = $this->getDoctrine()->getEntityManager(); 
    if ($request->isXmlHttpRequest()) { 
     $themes = $em->getRepository('WebSiteBackBundle:theme'); 
     $themes = $themes->findAll(); 
     foreach ($themes as $theme){ 

      $output[]=array($theme->getId(),$theme->getName()); 
     } 
    /* var_dump($themes); 
     $json = json_encode($themes); 

     $response = new Response();*/ 
     //   return $response->setContent($json); 
     return new JsonResponse($output); 

    } 
    return new JsonResponse('no results found', Response::HTTP_NOT_FOUND); 
} 

を助けたリンクです。私に多くの助けをあなたの答えのためにすべてありがとう

2

行うには多くの方法がありますそれで、私はあなたにそれらの1つを示します。

まず、コントローラから送信するためにあなたのデータを作成しデータをJsonResponseインスタンスを返す:

public function fooAction() 
{ 
    $data = ['foo1' => 'bar1', 'foo2' => 'bar2']; 

    return new JsonResponse($data); //or $this->json($data) since Symfony 3.1 
} 

JsonResponseは、そうでなければ、これらのデータであり、送信されたデータは、JSONとして解釈されなければならないブラウザに指示既定でプレーン/テキストとして解釈されます。

第二に、Javascriptのコールバック関数からアクセスするために、同じデータ構造を使用します。

$.post('{{ path('web_site_liste_theme_cmb') }}', function (data) { 
    console.log(data['foo1']); //output bar1 
    console.log(data.foo2); //output bar2 
}); 

をあなたの質問に送られたデータは、オブジェクトの配列だった、あなたはこの変数「JSON」のためのループを必要とするので、(配列)とオブジェクトの各プロパティへのアクセス。

+0

オブジェクトの各プロパティにどのようにループできますか。私はすでに "$ .each(json、function(index、value){..."でそれをしていると思いますか?) –

+0

はい、それはあなたの 'WebSiteBackBundle:Theme'エンティティに依存します。 "id"と "value"のプロパティがあります。そうでない場合は、コントローラーでjsonレスポンスを送信する前にこれらのデータを準備する必要があります。 – yceruto

+0

あなたはそれが私にとってうまくいきました。 –