如果我卷曲,服务器返回一个post对象数组,如下所示:
curl http://localhost/api/posts/
[
{
"id": 7,
"target": {
"body": "This is the body",
"title": "Airbnb raising a reported $850M at a $30B valuation",
"user": {
"first_name": "ben",
"last_name": "jamin"
}
}
},
{
"id": 11,
"target": {
"body": "This is the body",
"title": "Browsing the APISSS",
"user": {
"first_name": "user",
"last_name": "two"
}
}
}
]
我尝试使用fetch api获取此内容:
fromServer() {
console.log('fromServer')
var headers = new Headers();
headers.append('Accept', 'application/json');
let a = fetch('http://test.com/api/posts/', headers)
.then(function(response) {
if (response.status !== 200) {
console.log('There was a problem. Status Code: ' + response.status);
return;
}
response.json().then(function(data) {
console.log(data);
});
}
)
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
但是我收到了这个错误:
意外的令牌<在位置0的JSON中
SyntaxError:意外的令牌<在位置0的JSON中
我该如何解决这个问题?请你帮助我好吗。谢谢。
答案 0 :(得分:1)
很明显,在将响应解析为json对象时,您会遇到一些语法错误。
删除服务器json文件中的所有注释(如果有)。
如果不是: 我相信回应的身体不是json。
您正在从服务器接收HTML(或XML),但代码可以解析为JSON。 检查"网络" Chrome开发工具中的标签用于查看服务器响应的内容。
或使用此代码进行调试:(" Jaromanda X"表示)
.then(function(response) {
console.log(response);
console.log(response.status);
console.log(response.json());
console.log(response.text());
})
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
答案 1 :(得分:1)
请检查您的服务器是否仅以JSON格式提供响应。 对于关联数据,您应该使用"来启动JSON对象。 {"不是" [" 。 因此,您的数据应采用以下格式。
{
"data":[
{
"id": 7,
"target": {
"body": "This is the body",
"title": "Airbnb raising a reported $850M at a $30B valuation",
"user": {
"first_name": "ben",
"last_name": "jamin"
}
}
},
{
"id": 11,
"target": {
"body": "This is the body",
"title": "Browsing the APISSS",
"user": {
"first_name": "user",
"last_name": "two"
}
}
}
]
}
您可以从response.data获取所有数据。
有关详细信息,请参阅this link。
答案 2 :(得分:0)
错误消息的措辞与您在运行JSON.parse('< ...')时从Google Chrome获得的内容相对应。我知道你说服务器正在设置Content-Type:application / json,但我认为响应体实际上是HTML。
"语法错误:意外的令牌<在JSON的位置0"
使用行console.error(this.props.url,status,err.toString())加下划线。 错误实际上是在jQuery中抛出的,并作为变量错误传递给你。该行加下划线的原因仅仅是因为您正在记录它。
我建议您添加到日志记录中。查看实际的xhr(XMLHttpRequest)属性以了解有关响应的更多信息。尝试添加console.warn(xhr.responseText),您很可能会看到正在接收的HTML。
请根据上述说明更正您的代码。
答案 3 :(得分:0)
所以,你可以使用start JSON数组;
{
"array": [
{
"id": 7,
"target": {
"body": "This is the body",
"title": "Airbnb raising a reported $850M at a $30B valuation",
"user": {
"first_name": "ben",
"last_name": "jamin"
}
}
},
{
"id": 11,
"target": {
"body": "This is the body",
"title": "Browsing the APISSS",
"user": {
"first_name": "user",
"last_name": "two"
}
}
}
]
}
答案 4 :(得分:0)
所以问题是这样的:因为我是从局域网中的流浪机和我的主机文件中测试它,我添加了流浪汉机器人的ip作为url(test.com),设备无法获取网址。在我将vagrant机器更改为端口转发并给出机器的原始IP地址后,我能够获取json对象。谢谢大家的帮助。
答案 5 :(得分:0)
您可以尝试添加dataType
属性,就像dataType: 'html'
或dataType: 'text'