意外的令牌<在位置0的JSON中

时间:2016-08-08 05:18:53

标签: javascript json react-native

如果我卷曲,服务器返回一个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中

我该如何解决这个问题?请你帮助我好吗。谢谢。

6 个答案:

答案 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'

一样