我正在尝试解析从Movie返回的JSON数据。我收到一个错误,告诉我我得到了以下错误:
Uncaught SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at XMLHttpRequest.movieReq.onreadystatechange (discover.js:34)
at loadIMDBDetails (discover.js:38)
at MainFunc (discover.js:68)
at discover.js:5
I am accessing individual movie information using the following XMLHttpRequest:movieReq.open('GET','key=',false);
我还有其他XMLHttpRequests,它们返回JSON数据很好。这些请求使用的是API的发现函数。
这就是产生问题的功能。
function loadIMDBDetails(mO, i) {
movieReq = new XMLHttpRequest();
movieReq.onreadystatechange = function () {
var parsedObj = JSON.parse(movieReq.responseText);
mO.imdbId = parsedObj['imdb_id'];
};
movieReq.open('GET', 'https://api.themoviedb.org/3/movie/299537?api_key=34f8307d9addabf7924eab7f22cabb23', false);
movieReq.send();
}
When using console.log to return the responseText, this is the result:{“成人”:假,"backdrop_path":"/w2PMyoyLU22YvrGK3smVM9fW1jj.jpg",“belongs_to_collection”:空,“预算”:152000000,“体裁”:{“id”:28,“名称”:“行动”},{"id":12,“名称”:“冒险”},{"id":878,"name":"Science Fiction"},“主页”:“https://www.marvel.com/movies/captain-marvel”,"id":299537,"imdb_id":"tt4154664","original_language":"en",“original_title”:“漫威船长”,“概述”:“当地球陷入两个外星种族之间的银河战争中时,她成为了宇宙中最强大的英雄之一。”以20世纪90年代为背景的漫威船长是漫威电影宇宙历史上一个前所未有的时期的全新冒险。“流行”:419.096,"poster_path":"/AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg","production_companies":{"id":420,"logo_path":"/hUzeosd33nzE5MCNsZxCGEKTXaQ.png",“name”:“惊奇工作室”,"origin_country":"US"},"production_countries":{"iso_3166_1":"US",“名称”:“美利坚合众国”}、"release_date":"2019-03-06“、”收入“:910298835、”运行时“:124年、"spoken_languages":{"iso_639_1":"en”、"name":"English"}、"status":"Released“、"tagline":"Higher”。再远一点。更快。“,”标题“:”惊奇船长“,”视频“:假,"vote_average":7.3,"vote_count":2885}
发布于 2019-03-28 23:34:49
原来,我忘了添加一张关于onreadystatechange的支票。我添加了下面的检查,并在if语句中运行json解析,这解决了我的问题!
movieReq.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var parsedObj = JSON.parse(movieReq.responseText);
mO.imdbId = parsedObj['imdb_id'];
}
};发布于 2019-03-27 23:26:51
如果我正确地理解了您的问题,当您将console.log(movieReq.responseText)返回到一行以上时:
var parsedObj = JSON.parse(movieReq.responseText);
你得到了正确的JSON,对吗?
如果是这样的话,这意味着您不需要使用函数JSON.parse(),您可以直接访问对象movieReq.responseText的任何元素,在您的示例中,您可以访问movieReq.responseText.imdb_id而不需要解析它(因为它已经是JSON对象了)。
如果要将字符串转换为JSON对象,只需使用JSON.parse(),有关更多信息,请查看:parse.asp
https://stackoverflow.com/questions/55387493
复制相似问题