问:嗨,我目前正在学习JavaScript课程,因为这不是我在uni领域最强的技能。Dave是一位了不起的老师,我已经完成了所有AJAX和JQuery模块的工作。建议我尝试使用OMDb API拨打电话,该API会在您拨打电话时返回电影上的JSON数据
这是我当前的代码
$ (文档)。准备好了(function (){
var movieApi = “ http://www.omdbapi.com/?jsoncallback=?” ; var movieApiSettings = { t :“黑衣人” ,类型:“电影” ,西红柿:true ,r :“JSON” };功能displayMovie (数据){ VAR movieHTML = '<UL>' ; $ 。每个(数据
。项目,功能(i ,标题) {
movieHTML + = '<li>' ; movieHTML + = 'title:' + title 。title + 'Year:' + title 。年; movieHTML + = '</ li>' ; }); //在每个$ ('#displayHere' )结尾。html (movieHTML ); } $ 。getJSON (movieApi ,movieApiSettings
, displayMovie );
});
为了克服跨源策略,我需要将返回的数据转换为JSONP,我认为我已经使用jsoncallback =?了。在movieApi变量中的一部分,但是这没有返回任何内容,只是JavaScript控制台中的get回调中的错误。
如果有人有什么想法可能出什么问题,我将不胜感激!谢谢!
答:这里有几个问题...
jQuery和OMDB文档都将JSONP参数定义为“回调”,而不是“ jsoncallback”。您也可以只在设置对象中指定此设置(请参见下文)。因此,您的第一行可能就是:
var movieApi =“ http://www.omdbapi.com”;
从displayMovie函数中,您似乎希望得到一个搜索结果列表,但是OMDB中的t =参数返回一个特定的标题(而不是数组),这将使您的$ .each调用陷入混乱。您可能在执行搜索的s =之后:
var movieApiSettings = {
s:“黑衣人”,
键入:“电影”,
西红柿:true,
r:“ json”,
回调:“”
};
最后,可以使用响应对象中的“搜索”键(而不是“项”)来访问搜索结果,并且您需要小心指定要提取的属性名称,使其与响应中出现的属性完全相同(I ve下面使用方括号表示法只是为了清楚):
函数displayMovie(data){
var movieHTML =' < ul > ';
$ .each(data ['Search'],function(i,title){
movieHTML + =' < li > ';
movieHTML + ='title:'+ title ['Title'] +'Year:'+ title [' Year'];
movieHTML + =' </ li > ';
}); //结束每个
$('#displayHere')。html(movieHTML);
}
我希望这有帮助!当我在控制台中进行测试时,它对我有用,所以请告诉我您是否仍然有问题。