2017-08-30 14 views
0

SYMFONY 3を使用していますが、AJAXを使用して受信したJSONをコントローラから解析する必要があり、JSONを正しく読み取ることができず、以下の私のコード:AJAXレスポンスを使用してJSONオブジェクトを解析してhtmlテーブルに変換します

コントローラー:

$em = $this->getDoctrine()->getManager(); 

      $RAW_QUERY = 'SELECT id,DO_Date,DL_Design,DL_Qte,DL_MontantHT,DL_MontantTTC FROM `facture_ligne` WHERE facture_id=:id'; 

      $statement = $em->getConnection()->prepare($RAW_QUERY); 
      // Set parameters 
      $statement->bindValue('id', $id); 
      $statement->execute(); 

      $facture = $statement->fetchAll(); 

      $serializer = $this->container->get('jms_serializer'); 
      $reports = $serializer->serialize($facture,'json'); 
      return new Response($reports); 

マイスクリプト小枝ファイル内:

function detailfacture{{ fact.id }} (id) { 

    var z= new XMLHttpRequest(); 
    z.open("get","{{ path('Ajaxonify',{'id':fact.id}) }})",true); 
    z.send() 
    z.onreadystatechange = function result() { 
     var json=z.responseText; 
     if(json!="") 
     { 
      alert(json); 

      var tr; 
      for (var i = 0; i < json.length; i++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + json[1].DL_MontantHT + "</td>"); 
       tr.append("<td>" + json[1].DO_Date + "</td>"); 
       tr.append("<td>" + json[1].DL_Qte + "</td>"); 
       $('#tb').append(tr); 
      } 
     } 
     else alert("helo");  
    } 
} 

そして、この結果の一部のスクリーンショット: enter image description here enter image description here

私は、静的なJSONでテストされ、あなただけ読みたい場合には、これは何

console.log(data); 
console.log(json); 

戻り

enter image description here

答えて

1

あなたはこのように、それを使用する前に、JavaScriptオブジェクトにJSONをパースする必要があります。

var json = JSON.parse(json); 

alert(json)の後、forループの前にこの行を挿入すると、スクリプトが表示されますこのように:

function detailfacture{{ fact.id }} (id) { 

    var z= new XMLHttpRequest(); 
    z.open("get","{{ path('Ajaxonify',{'id':fact.id}) }})",true); 
    z.send() 
    z.onreadystatechange = function result() { 
     var json=z.responseText; 
     if(json!="") 
     { 
      alert(json); 
      json = JSON.parse(json); 

      var tr; 
      for (var i = 0; i < json.length; i++) { 
       tr = $('<tr/>'); 
       tr.append("<td>" + json[i].DL_MontantHT + "</td>"); 
       tr.append("<td>" + json[i].DO_Date + "</td>"); 
       tr.append("<td>" + json[i].DL_Qte + "</td>"); 
       $('#tb').append(tr); 
      } 
     } 
     else alert("helo");  
    } 
} 
+0

アラートは[オブジェクト] [オブジェクト]を返す前にjsonはすでにコントローラで解析されています –

+0

私は完全な例で答えを更新しました。 'alert'がJSONテキストを表示する場合、JSONはまだ解析されておらず、オブジェクトでもありません。 –

+0

また、ハードコードされた '1'の代わりに' i'変数を使用する 'tr.append()'呼び出しで行を更新しました。 –

1

ある

正常に動作しますJSON、多くのプラグインがあります。JSON Formatterのようです。それを使用するには、JSONを出力するだけでプラグインが識別され、有効になり、JSONの書式設定が容易になります。

別の答えはかなり印刷JSONです:

PHP:$echo "<pre>".json_encode($data, JSON_PRETTY_PRINT)."</pre>";

JS:document.write(JSON.stringify(data, null,4));

+0

私は、スクリーンショットを見て、それを読むことができ、私はちょうどHTMLテーブル –

+0

にそれを変換したい問題を表に摂餌(コル、セル画)を持っているとJSONのようなデータツリー可能ですXML。それを出力するためのJSON応答のみを知っている。私の答えは、組織的な方法でそれを読むことができます –

+0

私はそれを知っているが、なぜそれが未定義を返すか分からなかった:私はそれに従うこの例を見てhttp://jsfiddle.net/8kkg3/ –

関連する問題