Javascript Jquery:JSON解析总是得到意外的字符错误

Javascript Jquery:JSON解析总是得到意外的字符错误,javascript,jquery,Javascript,Jquery,我正在尝试解析来自服务器的数据。虽然我正在处理一个有效的JSON,但我总是得到JSON意外字符错误 请考虑此代码: var shows = $.parseJSON(fetchData('contentShows', this.id)); // Returns a valid JSON data $.each(shows, function(index, value) { console.log(value.id); }); fetchData = function(dataReque

我正在尝试解析来自服务器的数据。虽然我正在处理一个有效的JSON,但我总是得到
JSON意外字符错误

请考虑此代码:

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}
]

问题在于
fetchData
函数不返回JSON文本,而是返回一个。(因此,当您将其传递到
$.parseJSON
中时,它会转换为类似
[object object]
的字符串,这当然是无效的JSON。)

原因是您将
data
变量设置为
$.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);
    });
});
这样使用:

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);
    });
});

问题在于
fetchData
函数不返回JSON文本,而是返回一个。(因此,当您将其传递到
$.parseJSON
中时,它会转换为类似
[object object]
的字符串,这当然是无效的JSON。)

原因是您将
data
变量设置为
$.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);
    });
});
这样使用:

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);
    });
});

引用的JSON很好,这表明
fetchData
没有返回引用的内容。
fetchData
看起来像什么?例如,它可能是异步的吗?导致这种情况的一个常见原因是获取的数据中有null或其他特殊字符。@T.J.在那里,包含了fetchData函数。引用的JSON很好,这表明
fetchData
没有返回引用的内容。
fetchData
看起来像什么?例如,它可能是异步的吗?导致这种情况的一个常见原因是提取的数据中有null或其他特殊字符。@T.J.在这里,包含了fetchData函数。