jFeed - 未执行成功函数(jQuery 插件)
我有以下 Javascript 代码,其中 feed 是 rss feed 的有效 url。
jQuery(function() {
jQuery.getFeed({
url:feed,
success: function(feed){
alert(feed);
}
});
});}
当我运行此警报时,警报永远不会出现。 使用 Firebug 我可以看到正在建立的连接以及来自提要的响应。
注意:我知道这是一个安全问题,有些浏览器会阻止它,但目前的情况并非如此,因为我已经解决了该问题,并且浏览器不再阻止连接
编辑:由于某种原因,我无法使评论显示出来,所以在这里:
调用目前没有由脚本代理,因为这是一个测试,我只是用以下内容覆盖浏览器安全设置:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
I have the following Javascript code, where feed is a valid url to an rss feed.
jQuery(function() {
jQuery.getFeed({
url:feed,
success: function(feed){
alert(feed);
}
});
});}
when i run this the alert never shows up. using firebug i can see the connection being made and the response from the feed.
Note: i know this is a security issue and some browsers block it, this isnt the case at hand because i have worked around that issue and the browser no longer blocks the connection
EDIT : for some reason i cant make the comment show up so here:
The call isnt being proxyed by a script at the moment, since this is a test im just overriding browser security settings with:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
根据您提供的信息,我们可以看出您的通话是正确的。 问题可能出在其他地方。 建议您深入 jFeed 源代码并在 $.ajax success 方法中禁用 feed 解析:
如果弹出警报,则表明是 feed 解析问题。 在这种情况下,您可以检查 xml 是否正确并在此处提交以供进一步调查。
我已经运行了一些测试并检查了 jQuery 代码。 您说您解决了浏览器安全问题:我猜您在服务器上安装了一个代理脚本,该脚本将从远程服务器下载 rss 文件,然后将其传输到您的 ajax 请求(因为浏览器将阻止对 ajax 调用服务器与您的页面所在的服务器不同)。 当使用 dataType : 'xml' 进行 ajax 调用时,jQuery 期望响应的内容类型包含字符串“xml”:
这是我的问题:
下面是 jFeed 附带的简约 php 示例:
With the information you give, we can see that your call is correct. The problem is probably somewhere else. In suggest that you dig in jFeed source code and disable feed parsing in $.ajax success method:
If your alert pops up, it's a feed parsing problem. In this case, you can check that the xml is correct and submit it here for further investigation.
I've run some tests and checked jQuery code. You said that you worked around the browser security problem: I guess that you installed on you server a proxy script that will download the rss file from the distant server and then transmit it to your ajax request (because the browser will block ajax calls to a server different from the one your page is on). When making an ajax call with dataType : 'xml', jQuery expects that the content type of the response to contain the string "xml":
Here are my questions:
Here is a minimalistic php sample shipped with jFeed:
只是补充一点,对于那些需要使用自定义名称空间从提要中获取内容的人,使用 jFeed,您可以执行类似的操作
将您自己的项目添加到 JFeed Prototype
然后到 JRss 和 JAtom 的原型(无论您使用哪种),添加以下内容item 循环
希望有一天能帮助那些在使用 jQuery 处理 xml 中的名称空间时遇到困难的人。 我正在使用《纽约时报》的 RSSfeeds,需要让媒体缩略图显示在视频内容的链接中,并且不得不花一些时间来弄清楚如何通过命名空间进行工作
Just to add that for those needing to get content out of feeds with customized namespaces, with jFeed, you could do stuff like so
Add your own items to JFeed Prototype
Then to the prototype of JRss and JAtom, which ever your using, add the following the item loop
Hope this one day helps someone too struggling with handling namespaces in xml with jQuery. I am working with RSSfeeds from the NYT and needed to get media thumbnails to display in links to video content, and had to spend some time to figure out how to go work thru namespaces
我有类似的问题。 尝试将 URL 硬编码到 url: 中,看看这是否有效,而不是设置 feed 变量。
您的段末尾有一个额外的 },这只是代码的额外部分吗?
I had a similar problem. Try hard coding the URL into the url: and see if that works rather than setting a feed variable.
You have an extra } at the end of your segment, is that just an extra part of your code?
如果你想从自定义命名空间读取内容,还有一件事:
上面的('转义冒号')方法在 Chrome 中无法正常工作,但这个('nodeName')方法将在所有浏览器中工作:
item.mediaThumbnail = $($ (this).find("[nodeName=media:thumbnail]").eq(0)).attr("url");
one more thing if you want to read content from custom namespaces:
the above ('escaped colon') method won't work properly in Chrome but this ('nodeName') approach will work in all browsers:
item.mediaThumbnail = $($(this).find("[nodeName=media:thumbnail]").eq(0)).attr("url");