当我使用....
var jsonData = JSON.parse(xhttp.responseText);
Run Code Online (Sandbox Code Playgroud)
我收到错误 =>“JSON.parse:JSON 数据第 1 行第 50 列的 JSON 数据后出现意外的非空白字符”
这是我来自 php 脚本的 JSON 数据
{"results":[{"oldID":5,"oldMain":"News papers"}]}{"results":[{"oldID":3,"oldMain":"Construction"}]}{"results":[{"oldID":2,"oldMain":"Banking Files"}]}{"results":[{"oldID":1,"oldMain":"Technologies"}]}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?...谢谢
虽然有点晚了,但 @igniz87 和 @Benjamin James Kippax 的回答会让你的网站面临安全问题,效仿他们的例子是非常危险的。正如奥瓦斯普所读到的那样,
ALWAYS RETURN JSON WITH AN OBJECT ON THE OUTSIDE
Run Code Online (Sandbox Code Playgroud)
因此,为了成为一个免受黑客野蛮行为的保护层,您需要始终让外部原语成为 JSON 字符串的对象。正如您可以清楚地看到的,上述人们的答案并不遵循这一重要的安全规则。
此外,Owasp 还举了一个例子,表示像下面这样的 JSON 是EXPLOITABLE:
[{"object": "inside an array"}]
Run Code Online (Sandbox Code Playgroud)
然而,以下 JSON 不是,
{"object": "not inside an array"}
{"result": [{"object": "inside an array"}]}
Run Code Online (Sandbox Code Playgroud)
您需要删除重复的键元素并按以下方式更改它,这样您将在外部拥有一个对象。
{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}],
"resultss": [{
"oldID": 3,
"oldMain": "Construction"
}]}
Run Code Online (Sandbox Code Playgroud)
在这里,实际上您应该带上 php 代码,因为问题出在发送 JSON 的 php 代码上。当您想要发送 JSON 时,请尝试创建数据数组。我按照以下方式进行。
$data = [];
foreach ($results as $res) {
$t = [];
$t['oldID'] = $res['oldID'];
$t['oldMain'] = $res['oldMain'];
$data[] = $t;
}
echo json_encode(['results' => $data]);
Run Code Online (Sandbox Code Playgroud)
你最好发送你的php代码,这里缺少。我的 php 脚本不包含您的所有代码,但它为您提供了如何执行此操作的想法。
过去几年我也遇到过同样的问题。有时问题与无效的 JSON 无关..像我现在一样..问题是我必须在stringify之前使用JSON.parse
var db = JSON.stringify(data);
var db = JSON.parse(db);
Run Code Online (Sandbox Code Playgroud)
有时在php中你必须json_encode($data)正确使用。
有时你的 JSON 无效(在线 JSON 验证器)
小智 2
它不是有效的 json,您必须将其包装在数组中。有效的json是这样的
[{
"results": [{
"oldID": 5,
"oldMain": "News papers"
}]
}, {
"results": [{
"oldID": 3,
"oldMain": "Construction"
}]
}, {
"results": [{
"oldID": 2,
"oldMain": "Banking Files"
}]
}, {
"results": [{
"oldID": 1,
"oldMain": "Technologies"
}]
}]
Run Code Online (Sandbox Code Playgroud)
查看string 开头和结尾处的方括号[ ]以及用于分割对象的, 。
这是一些在线 json linter,用于检查您的 json 是否有效。