奇怪的javascript行为-JSON.parse:意外字符
strange javascript behavior - JSON.parse: unexpected character
我有以下按钮:
<button onclick='enroll(<?php echo $course['cs_id']; ?>)'>enroll</button>
当用户点击它时,以下javascript函数将启动:
function enroll(id){
$.post("<?php echo base_url().'courses/enroll/'; ?>"+id , function(data){
obj = JSON.parse(data);
alert(obj.state);
});
}
执行对php页面的post请求,该页面回显json数组,如下所示:
$data = array("state"=>"done");
die(json_encode($data));
但不幸的是,控制台中出现以下错误:
JSON.parse:意外字符
我检查了页面响应,它看起来像这样(看起来很好):
{"state":"done"}
当我把enroll()函数改成这样时:
function enroll(id){
$.post("<?php echo base_url().'courses/enroll/'; ?>"+id , function(data){
alert(data);
});
}
它正确地显示警报信息,如下所示:
{"state":"done"}
那么,为什么它拒绝在一切似乎都正常的情况下解析响应呢?知道吗?
我的猜测是,您的代码实际上比您想象的工作得更好!我认为jQuery从服务器接收您的JSON,并意识到它是JSON,尽管您还没有将其指定为JSON。(也许您的PHP正在发送Content-Type
标头?)
所以data
实际上已经是一个Javascript对象,jQuery已经从您的JSON中解码了它。在对象上调用JSON.parse
时,它会转换为字符串[object Object]
,然后进行解析。[object Object]
显然是无效的JSON,因此出现了意外的字符错误。
由于该字符串显然是有效的JSON,我的下一个猜测是,在字符串之前有一些数据导致解析器不满意。测试这一点的最佳方法是使用String#charCodeAt
,它可以显示字符串中给定点的精确字符。
因此,使用以下代码,我们可以测试字符串中的第一个字符是什么:
console.log(data.charCodeAt(0));
您说这返回65279
,它在Unicode文档的开头是一个字节顺序标记。很明显,您在服务器端代码的某个地方输出了这一信息。你需要找出它的位置并将其删除。
不要再次解析数据:
function enroll(id){
$.post("<?php echo base_url().'courses/enroll/'; ?>"+id , function(data){
alert(data.state);
});
}
相关文章:
- 当其他解析器认为意外的令牌有效时,json.parse会失败
- AJAX语法错误:JSON.parse:意外字符
- 错误:[$parse:syntax]语法错误:令牌''是意外的令牌
- 使用 JSON.parse 将字符串(变量)转换为对象,错误意外标记
- “JSON.parse(str)”返回“意外令牌c”,但str是一个字符串
- AngularJS json.parse 在 json 数据的第 1 行第 1 列处意外的数据结尾
- JSON.parse:意外字符
- Json响应错误Json.parse:意外的数据结束错误
- json错误json.parse:意外的数据结束错误
- 奇怪的javascript行为-JSON.parse:意外字符
- Vimeo Slider脚本-SyntaxError:JSON.parse:意外字符
- 语法错误:JSON.parse:意外字符
- 语法错误:JSON.parse:意外的数据结束
- JSON.parse 意外结束数据火狐狸插件
- JSON.parse:意外的字符错误
- "SyntaxError:JSON.parse:意外字符"将多个变量从AJAX传递到PHP时出错
- JSON.parse:意外字符
- json.parse意外的令牌错误
- json_encode json.parse意外的令牌<
- 如何修复jTable插件的JSON.parse:意外字符Line550jQuery.js错误