1

我正在尝试解析来自服务器的数据。虽然我正在处理一个有效的 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}
]
4

1 回答 1

1

问题是您的fetchData函数不返回 JSON 文本,它返回一个jqXHRobject。(因此,当您将其传递给 时$.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);
    });
});
于 2013-03-15T09:44:11.427 回答