2017-08-30 29 views
0

我正在使用SYMFONY 3,并且我想从使用Ajax的控制器解析接收到的JSON,那里的问题是JSON无法正确读取并返回undefined,这是下面我的代码:使用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

您需要的JSON解析成一个JavaScript对象使用它,就像在此之前:

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

此外,请注意,我更新了'tr.append()'调用行来使用'i'变量而不是硬编码'1'。 –

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

的问题是表有一个百通(西,CEL)和JSON可以像一个数据树XML。只知道JSON响应输出它。我的回答让你有条不紊地阅读它 –

+0

我知道它,但只是不知道为什么它返回undefined:看看这个例子,我遵循它http://jsfiddle.net/8kkg3/ –