我正在尝试用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数组这么难?
我显然做错了什么。请告诉我,我已经筋疲力尽了。
答案 0 :(得分:1)
你能不能在error.log
之后在control.php中尝试下面的代码
$lines = array_slice($lines, 0, count($lines)-1);
echo json_encode($lines, JSON_FORCE_OBJECT);

希望它能帮助您解决问题
答案 1 :(得分:1)
由于您无论如何都要将文件的全部内容都读入内存,因此可以通过换行/分解和忽略空行来更轻松地将其拆分> p>
$data = file($path, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
echo json_encode($lines, JSON_FORCE_OBJECT);
答案 2 :(得分:1)
只需替换
行$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;阅读文件