使用jQuery将XML中的搜索结果放入数组中
我之前提出了另一个问题,并设法获得了一些代码,这些代码可以从YouTube搜索查询中获取XML文件。 然后,使用jQuery,从XML文件(videoID)获取所需的信息,并将其放入javascript变量中。
这工作得很好,但我想(如果可能的话)我们的网站没有1个,而是3个来自此频道的最新video。 我被建议更改搜索以获得3个结果而不是一个,并将jQuery .find()结果放入数组中。
问题是我想(我应该说我确定)我做错了…看一看:
jQuery(document).ready(function() { jQuery.ajax('https://gdata.youtube.com/feeds/api/videos?author=inthegamesroom&orderby=published&prettyprint=true&start-index=1&max-results=3&v=2',{ dataType:'xml', success: function(data,status, xhr ) { var $data =$(data); var videoTag = new array ($data.find('videoid')); var videoId1 = videoTag[0].text(); var videoId2 = videoTag[1].text(); var videoId3 = videoTag[2].text(); } }); // YouTube Video embed command function embedYT1(id, loaction) { jQuery(location).append("") } // Call video embed function for 3 vids embedYT(videoId1, '#vid1'); embedYT(videoId2, '#vid2'); embedYT(videoId3, '#vid2'); });
有人可以帮忙吗?
你可能还注意到我有一个embedYTfunction,旨在嵌入3个video。 我做对了吗? (我的表格中有三个id='vid#'
。
好的,这里有些问题。 不要为此感到难过。 你正在学习,并且经常犯错误:)
首先,vars videoId1
, videoId2
和videoId3
是声明的函数的本地,因此当您调用embedYT(videoId1)
和后者时,它们将不可见。
其次,即使变量全局(尝试不在Javascript中声明全局变量,请真的,请)在成功回调中设置的值在调用embedYT
函数时也是embedYT
。 一旦页面加载就会执行这些函数,这可能在AJAX回调执行之前发生。 要解决此问题,我们需要将embedYT调用移动到回调
第三, $ .fn.find()返回一个jQuery集合(类似于数组),因此不需要将结果放入其他数组中。 另外,查看来自youtube API的响应,您应该找到的标签是’yt:videoid’,而不是’videoid’(其命名空间)。 在这个页面中,我找到了使用jQuery执行该操作的正确语法。 让我们解决这两件事:
var videoTag = $data.find('yt\\:videoid');
修复后,我们可以在回调中使用$ .fn.each迭代集合,并为每个元素调用embedYT
,修复第二个问题:
... success: function(data,status, xhr ) { var $data =$(data); var videoTag = $data.find('yt\\:videoid'); videoTag.each(function(i) { embedYT($(this).text(), '#vid' + i); }); } ...
迭代集合比访问每个元素更具前瞻性。 如果您必须更改video的数量,可能无需更改javascript即可。
所以最终的代码应该是这样的
]
希望能帮助到你