使用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 videoId1videoId2videoId3是声明的函数的本地,因此当您调用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即可。

所以最终的代码应该是这样的

 ]    

希望能帮助到你