【问题标题】:PHP generates invalid JSONPHP 生成无效的 JSON
【发布时间】:2015-07-14 18:09:52
【问题描述】:

当通过 jQuery AJAX 调用从 HTML 文件调用时,我通过回显从 PHP 文件传递​​了以下 JSON 字符串。

字符串包含 HTML,它被输入到 DataTables 单元格中。返回的 JSON 似乎将 </ 解释为换行符,因为它正在插入 ASCII 10 和 13(根据文本到 ASCII 转换网站),这导致 DataTables 将其视为无效的 JSON。

我不清楚是什么导致了错位的 ASCII。

HTML(数据表加载):

var mydatatable = $("#myassets").DataTable(
{
    "ajax": "../php/fetchmydata.php",
    "type": "POST",
    "dataType": "json",
    "columns": [
        {"data":"teamName","width":"30%"},
        {"data":"teamImg","width":"20%"},           
        {"data":"cluesFoundCount","width":"5%"},
        {"data":"assets","width":"30%"},
        {"data":"scores","width":"5%"}
    ]
});//end dataTable

PHP (fetchmydata.php):

$myjson = '{"teamName":"<div class=\'teamblock\'><span class=\'bold\'>' . $row['TeamName'] . '</span><div>rick</div></div>"';
$myjson.='}';
echo '{"data":[' . $myjson . ']}';

return $myjson;

【问题讨论】:

  • 在 PHP 中构建一个数组并使用 json_encode 代替。它更安全、更易于阅读。

标签: jquery json datatables


【解决方案1】:

您需要使用json_encode 以避免错误。

请改用以下代码:

$data = array(
   "data" => array(
      array(
         "teamName" =>
            '<div class="teamblock"><span class="bold">' . 
            $row['TeamName'] . 
            '</span><div>rick</div></div>',
         "teamImg" => "",
         "cluesFoundCount" => "",
         "assets" => "",
         "scores" => ""
      )
   )
);

echo json_encode($data);

但是,为了避免通过 Ajax 传递大量数据,建议使用 columns.render 选项在客户端生成 HTML。

【讨论】:

    【解决方案2】:

    &lt;div&gt; 标记生成 ASCII 10 和 13。我将 div 更改为 span 并且 JSON 正确呈现。

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 2013-06-26
      • 2015-04-03
      • 2013-12-23
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      相关资源
      最近更新 更多