2013-03-15 117 views
1

我想解析来自服务器的数据。虽然我正在处理有效的JSON,但我总是得到JSON unexpected character errorJquery: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} 
] 
+1

引述的JSON是罚款,这表明'fetchData'没有返回什么报价。 'fetchData'看起来像什么?例如,它可能是异步的吗? – 2013-03-15 09:35:33

+0

对此的一个常见原因是提取的数据中为null或其他特殊字符。 – HBP 2013-03-15 09:37:01

+0

@ T.J。那里包括了fetchData函数。 – user1966211 2013-03-15 09:39:42

回答

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); 
    }); 
}); 
相关问题