好的,所以我试图从保存了几个LED等状态的json文件中提取数据。我有一个每秒运行几次的脚本并提取数据并且网页加载它。问题是,在服务器读取json文件大约20次之后,最终会抛出此错误。
SyntaxError:JSON.parse:第1行第1列的意外数据结尾 JSON数据
// For toggling the LED/switch status indicators using the json data
$(document).ready(function() {
(function worker() {
$.ajax({
url: 'server_info.json',
success: function(data) {
var json = $.parseJSON(data);
console.log(json);
if (json.led_1 == "off") {
// do stuff
}
if (json.led_2 == "off") {
// do stuff
}
if (json.led_3 == "off") {
// do stuff
}
},
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 250);
}
});
})();
});
json文件如下所示:
{ "led_1": "on", "led_2": "on", "led_3": "on" }
在我看来,json数据始终格式正确。我不明白错误的来源。有什么想法吗?
答案 0 :(得分:6)
使用" dataType"设置以识别响应的类型,以便.ajax()调用知道它的JSON并且不需要猜测。
这可能无法解决问题,因为很可能您的响应没有为引发错误的调用返回JSON。如果添加错误设置,您可以看到服务器在出错时返回的内容,但是如果请求完成,请检查控制台以查找从服务器返回的内容。正如我所说,如果你从$ .parseJSON()开始收到错误,它可能不是JSON。
$(document).ready(function() {
(function worker() {
$.ajax({
url: 'server_info.json',
dataType: 'json',
success: function(data) {
console.log(data);
if (data.led_1 == "off") {
// do stuff
}
if (data.led_2 == "off") {
// do stuff
}
if (data.led_3 == "off") {
// do stuff
}
},
error: function( data, status, error ) {
console.log(data);
console.log(status);
console.log(error);
}
complete: function() {
// Schedule the next request when the current one's complete
setTimeout(worker, 250);
}
});
})();
});
答案 1 :(得分:2)
使用Firefox调试,当我得到该错误时,我能够看到返回的值类型未定义。首先检查要解析的值的null / undefined,然后如果condition为false,则继续解析,否则句柄条件解决了我的问题。
答案 2 :(得分:1)
结果是,错误与JSON无关。这实际上是由于后端返回了无JSON或空字符串。
// Update
if(updateFile($id,$author)) {
echo json_encode(
array('message' => 'Post Updated')
);
} else {
echo json_encode(
array('message' => 'Post Not Updated')
);
}
对我来说,这可行。好运