我正在尝试解析服务器中的数据。虽然我正在研究一个有效的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}
]
答案 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);
});
});