【问题标题】:Getting a "syntaxError: JSON.parse: expected ',' or ']' after array element at line x column x" when adding a leading zero to single digit numbers将前导零添加到单个数字时,在第 x 行第 x 列的数组元素之后获取“syntaxError:JSON.parse:预期的','或']'”
【发布时间】:2014-05-17 20:57:52
【问题描述】:

我正在使用 dataTables 通过 PHP、Ajax 和 jQuery 显示来自 MySQL 数据库的数据。 我显示的数据是数字,一切正常。

这是我的 php 脚本

require_once '../core/init4ajax.php';
$loteria=$_POST['loteria'];

$lotto = new Lotto();

$ultimos_resultados=$lotto->last_results($loteria,20);

function objectToArray($d) 
{
    if (is_object($d)) {
        // Gets the properties of the given object
        // with get_object_vars function
        $d = get_object_vars($d);
    }

    if (is_array($d)) {
        return array_map(__FUNCTION__, $d);
    } else {
        // Return array
        return $d;
    }
}

$new_array = objectToArray($ultimos_resultados);

$result = array();
echo '[';
foreach ($new_array as $new_array2) {
    echo '[';
    foreach ($new_array2 AS $value){
    /********The following piece of code is used to add a leading zero to single digit numbers********/
    /*if (1 == strlen($value)) {
        $zero=0;
        $value = $zero.$value;
    }*/
        echo $value;
        if($value!==end($new_array2)){ //referencias: http://stackoverflow.com/a/8780881/1883256
            echo',';
        }
    }
    echo ']';//referencias: http://www.mydigitallife.info/how-to-access-php-array-and-multidimensional-nested-arrays-code-syntax/
    if($new_array2!==end($new_array)){
        echo ',';
    }else{ echo '';}
}
echo ']';

这是 php 脚本的输出示例:

[[2740,3,9,21,27,46,48],[2741,3,4,13,22,27,29], ... ,[2757,32,34,35,36,50,55]]

这里是 ajax 代码。

$(document).ready(function() {

$.ajax({
    url: "ajax/default_chart_numbers_table.php",
    type: "post",
    data: {loteria: 'melate'},
    success : function (resp){
        // would look something like ['val1','val2', 'etc']
        var column_data = $.parseJSON(resp);
        //alert(column_data);
        // adding data to datatables
        for (var j=0;j<=column_data.length-1;j++){
            // adding each row with its column data
            //iterating values to add leading zeros to single digits:

            $('#dataTables-melate').dataTable().fnAddData(column_data[j]);
        }
    },
    error: function(jqXHR, textStatus, ex) {
      console.log(textStatus + "," + ex + "," + jqXHR.responseText);
    }
});    


} );

我已经意识到我希望单个数字以零开头,例如4,应该显示为04

通过添加代码以添加前导零(这段代码已经在我的php代码中但已注释):

if (1 == strlen($value)) {
            $zero=0;
            $value = $zero.$value;
        }

现在 php 代码以我想要的方式返回数组:

[[2740,03,09,21,27,46,48],[2741,03,04,13,22,27,29], ... ,[2757,32,34,35,36,50,55]]

然而,现在从 ajax 脚本中我得到以下错误:

SyntaxError: JSON.parse: expected ',' or ']' after array element at line 1 column 9

数据不再显示在数据表中。

为什么会这样?我该如何解决?

我已经解决了: 我只需要将双引号添加到这些单个编辑编号:

if (1 == strlen($value)) {
    $zero=0;
    $value = '"'.$zero.$value.'"';
}

这就成功了! ☺

【问题讨论】:

  • 为什么不在你的 PHP 脚本中使用json_encode()
  • 因为它不是那样工作的。亚历克斯帮我解决了这个问题here
  • 出于好奇,为什么您需要为每个单个数字添加前导零?
  • @VincentWilkie 因为当我查找单个数字时,会出现其他不必要的结果。例如,如果我搜索数字“5”,也会出现诸如 50、51、... 59 之类的数字。如果我搜索数字 10,则只会出现具有该数字的行。这就是为什么我想要一个前导零。如果您有任何其他建议,我会很高兴知道! :)
  • 有什么理由不能在 PHP 脚本中使用 echo json_encode($multi_dimensional_array)

标签: php ajax json datatables jquery-datatables


【解决方案1】:

它与前导零无关。这是因为您将输出视为 JSON,它不是 。它是一个数组数组。错误是由以下行引起的:

var column_data = $.parseJSON(resp);

尝试使用http://jsonlint.com 测试输出/假定的 JSON。示例它是如何工作的:

var column_data = [
     [2740,3,9,21,27,46,48],
     [2741,3,4,13,22,27,29],
     [2757,32,34,35,36,50,55]
];

var dataTable = $('#dataTables-melate').dataTable()

for (var j=0;j<=column_data.length-1;j++){
  // adding each row with its column data
  //iterating values to add leading zeros to single digits:
  dataTable.fnAddData(column_data[j]);
}

查看演示 -> http://jsfiddle.net/jPLSf/

【讨论】:

    【解决方案2】:

    添加前导零会将javascript“数字”更改为“字符串”。所以 JSON.parse 返回一个期望数字的错误(例如:4)但看到的是一个字符串(例如:"04")。

    在下图中,您可以看到我运行了两个尝试将字符串解析为 JSON 的命令。在第一个命令中,第一个数组中的第二项是03,并输出SyntaxError。在第二个命令中,03 已更改为 3,现在它可以正确解析了。

    我建议研究如何在不带前导零的情况下将数据添加到数据表中,以便表格正确显示,然后更改查看/显示数字的方式

    我还建议研究 json_encode() 以从 PHP 中回显 json。

    我一直使用json_encode() 从 PHP 回显 json,以确保在进行 AJAX 调用时得到正确的数据输出。

    【讨论】:

    • 如何将所有值都视为字符串?这可能吗?
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多