Jquery:JSON解析总是得到意想不到的字符错误
问题描述:
我想解析来自服务器的数据。虽然我正在处理有效的JSON,但我总是得到JSON unexpected character error
。Jquery: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文本,它返回一个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);
});
});
引述的JSON是罚款,这表明'fetchData'没有返回什么报价。 'fetchData'看起来像什么?例如,它可能是异步的吗? – 2013-03-15 09:35:33
对此的一个常见原因是提取的数据中为null或其他特殊字符。 – HBP 2013-03-15 09:37:01
@ T.J。那里包括了fetchData函数。 – user1966211 2013-03-15 09:39:42