Jquery:JSON解析总是会出现意外的字符错误

时间:2013-03-15 09:32:58

标签: javascript jquery

我正在尝试解析服务器中的数据。虽然我正在研究一个有效的JSON,但我总是得到JSON unexpected character error

请考虑以下代码:

var shows = $.parseJSON(fetchData('contentShows', this.id)); // Returns a valid JSON data

$.each(shows, function(index, value) {
    console.log(value.id);
});

fetchData = function(dataRequest, id) {
    var data = $.ajax({
        url: '/shows.php',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            console.log(dataRequest);
            console.log(data);
        }
    });
    return data;
}

这是示例JSON:

[
    {"shows":[],"spool":"/home","name":"Test Name","id":2}
]

1 个答案:

答案 0 :(得分:1)

问题是你的fetchData函数没有返回JSON文本,它返回jqXHR object。 (因此,当您将其传递到$.parseJSON时,它会变成类似[object Object]的字符串,这当然是无效的JSON。)

原因是您将data变量设置为$.ajax调用的结果并将其返回。 $.ajax的返回值是jqXHR对象。

但仅仅改变它是不够的,因为调用是异步; 函数已经返回后完成

最好的办法是修改fetchData以接受回调,然后在回调中使用获取的数据。像这样:

fetchData = function(dataRequest, id, callback) {
    $.ajax({
        url: '/shows.php',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            console.log(dataRequest);
            console.log(data);
            callback(data);
        }
    });
}

像这样使用:

fetchData('contentShows', this.id, function(showData) {
    var shows = $.parseJSON(showData);

    $.each(shows, function(index, value) {
        console.log(value.id);
    });
});