PHP json_encode错误:清空最后一条记录

时间:2015-10-24 06:41:39

标签: php jquery json ajax

我正在尝试用ajax读取文件,但是我得到了一个恐怖

在JSON数据的第1行第48列的JSON数据之后的 SyntaxError:JSON.parse:意外的非空白字符

因为经过检查,我总是最后以""作为最后一条记录......?!

以下是test.txt文件:

one
two
three

这是我的ajax电话:

    $.ajax( {
        url: 'control.php',
        type: "post",
        dataType: "json",
        data: details,
        success: function(data, textStatus) {
            $("#whitelist").append(data[0])
        },
        complete: function(jqXHR, responseText) {
            // alert('complete')
        },
        error: function(jqXHR, textStatus, errorThrown) {
            alert('error');
            // var responseText = jQuery.parseJSON(jqXHR.responseText);
            console.log(errorThrown);
        }
    });

这里是control.php,它读取文件并假设发送一个json编码的数组:

  $path = "test.txt";
  $file = fopen($path, 'r');
  $data = fread($file, filesize($path));
  fclose($file);

  $lines =  explode(PHP_EOL,$data);

  error_log('Lines: ' . json_encode($lines, JSON_FORCE_OBJECT) . "err: " . json_last_error());
  error_log('Lines: ' . serialize($lines));
  echo json_encode($lines, JSON_FORCE_OBJECT);

以下是error_log()输出:

Lines: {"0":"one","1":"two","2":"three","3":""} json_last_error: 0

这是firebug输出:

{"0":"one","1":"two","2":"three","3":""}{"error":"Error","message":[]}

现在已经好几个小时了!!这""来自哪里?另外,为什么json_last_error()根本没有帮助?为什么构建一个简单的json数组这么难?

我显然做错了什么。请告诉我,我已经筋疲力尽了。

3 个答案:

答案 0 :(得分:1)

你能不能在error.log

之后在control.php中尝试下面的代码



$lines = array_slice($lines, 0, count($lines)-1);
echo json_encode($lines, JSON_FORCE_OBJECT);




希望它能帮助您解决问题

答案 1 :(得分:1)

答案 2 :(得分:1)

你的control.php文件中的

只需替换

$lines =  explode(PHP_EOL,$data);

$lines =  explode(PHP_EOL,trim($data));

我测试了它,它的输出为

{"0":"one","1":"two","2":"three"}

使用trim()将删除任何不需要的空格

此外,如果文件为空,则fread()将产生警告

fread(): Length parameter must be greater than 0 

防止这个最终代码应该是这样的

<?php
$path  = "test.txt";
$lines = '';

if(filesize($path)>0){
    $file  = fopen($path, 'r');
    $data = fread($file, filesize($path));
    $lines =  explode(PHP_EOL,trim($data));
    fclose($file);
}

echo json_encode($lines, JSON_FORCE_OBJECT);
?>

只有当文件不为空时,我们才需要打开&amp;阅读文件