Javascript AJAX json意外标记';
我有以下代码:Javascript AJAX json意外标记';,javascript,jquery,ajax,json,syntax-error,Javascript,Jquery,Ajax,Json,Syntax Error,我有以下代码: $.ajax({ dataType: 'text', url: '/_/js/answers.json', type: "GET", success: function (data) { alert(data); alert(data.code); var result = JSON
$.ajax({
dataType: 'text',
url: '/_/js/answers.json',
type: "GET",
success: function (data) {
alert(data);
alert(data.code);
var result = JSON.parse(data);
var hey = JSON.parse('{"code": 123}');
alert(hey.code);
alert(result.code);
},
error: function () {
alert("code not found");
}
});
在第一个警报中,alert(data)
它向我显示“{”code:123}”,在第二个警报中alert(data.code)
,它告诉我未定义的,在第三个警报中alert(hey.code)
,它向我显示123
,这就是我想要的,但在第四个警报中,控制台告诉我未捕获的语法错误:意外标记'
当我将JSON.parse
更改为$.parseJSON
时,它会执行完全相同的操作。
我不知道怎么了,json很好(与var hey中的json完全相同)
我将json传递给服务器,如下所示:
javascript:
var json = {code: code};
json = JSON.stringify(json);
json = {data: json};
$.ajax({
url: "/_/js/write-json.php",
type: "POST",
dataType: 'json',
data: json
});
php:
<?php
$myFile = "answers.json";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh,var_export($_POST['data'], true));
fclose($fh);
?>
尝试将数据类型更改为JSON:
$.ajax({
dataType: 'JSON',
url: '/_/js/answers.json',
type: "GET",
success: function (data) {
alert(data);
alert(data.code);
var result = JSON.parse(data);
var hey = JSON.parse('{"code": 123}');
alert(hey.code);
alert(result.code);
},
error: function () {
alert("code not found");
}
});
JSON周围的“
字符使其成为JavaScript字符串,不构成数据的一部分
看起来JSON中包含了通过HTTP请求的字符,因此它们确实构成了数据的一部分
这不是有效的JSON。删除引号
你应该:
{"code": 123}
不是
可能是您的JSON无效,为了确保检查它,您可以说您的警报数据状态为'{“code”:123}
。这包括不应该出现的单引号。这就是你的问题。单引号是Javascript文字语法的一部分,它们不是JSON本身的一部分。你可以在使用它之前使用JSON.stringify(data)或eval(data)。我认为你应该修复服务器端代码以返回有效的JSON,而不是在你解析它时获取结果的子字符串。出于兴趣,您为什么不使用数据类型:'json'
而只是获取一个对象作为数据
参数?如果您将数据类型更改为json,那么jQuery会为您解析它。因此不需要var result=JSON.parse(数据)代码>因为数据
已经是一个对象。但是,从其他注释中可以看出,返回的JSONw无效。这个方法需要来自服务器的有效JSON(以及有效的JSON内容类型)是的,但是当我将其更改为JSON时,它会给我错误函数。我可能没有以正确的方式将json传递到服务器。必须将标题内容类型设置为“text/json”
'{"code": 123}'