jFeed - 未执行成功函数(jQuery插件)

时间:2009-03-19 12:17:36

标签: jquery jquery-plugins jfeed

我有以下Javascript代码,其中Feed是rss Feed的有效网址。

jQuery(function() {

        jQuery.getFeed({
            url:feed,
            success: function(feed){
                      alert(feed);
                      }
        });
    });}

当我运行此警报时,警报永远不会显示出来。使用firebug我可以看到正在建立的连接和来自feed的响应。

注意:我知道这是一个安全问题,有些浏览器阻止了它,这不是现在的情况,因为我解决了这个问题并且浏览器不再阻止连接 < /强>

编辑:由于某种原因,我不能让评论显示在这里:

此时调用不会被脚本代理,因为这是一个测试我只是用以下内容覆盖浏览器安全设置:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

4 个答案:

答案 0 :(得分:3)

根据您提供的信息,我们可以看到您的通话是正确的。问题可能在其他地方。建议你在$ .ajax成功方法中挖掘jFeed源代码并禁用feed解析:

    $.ajax({
        type: 'GET',
        url: options.url,
        data: options.data,
        dataType: 'xml',
        success: function(xml) {
            var feed = xml; // <== was "var feed = new JFeed(xml);"
            if(jQuery.isFunction(options.success)) options.success(feed);
        }
    });

如果您的提醒弹出,则表明是Feed解析问题。在这种情况下,您可以检查xml是否正确并在此处提交以供进一步调查。


我已经运行了一些测试并检查了jQuery代码。你说你解决了浏览器安全问题:我猜你在服务器上安装了一个代理脚本,它将从远程服务器下载rss文件,然后将其传输到你的ajax请求(因为浏览器将阻止ajax调用a服务器不同于您的页面所在的服务器)。当使用dataType:'xml'进行ajax调用时,jQuery期望响应的内容类型包含字符串“xml”:

var ct = xhr.getResponseHeader("content-type"),
  xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
  data = xml ? xhr.responseXML : xhr.responseText;

以下是我的问题:

  • 您是否按照我的想法使用脚本作为代理脚本?
  • 此脚本是否将内容类型设置为包含xml的内容?

这是jFeed附带的简约php示例:

<?php
header('Content-type: application/xml');
$handle = fopen($_REQUEST['url'], "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>

答案 1 :(得分:2)

只是为那些需要通过自定义命名空间获取内容的人添加,使用jFeed,你可以做这样的事情

<dc:creator>SomeBody Name</dc:creator>
<media:thumbnail url="someimage.jpg" />

将您自己的项添加到JFeed Prototype

JFeedItem.prototype = {
        title: '',
        link: '',
        description: '',
        updated: '',
        id: '',
        mcontent:'',
        mdescr:'',
        mcredit: '',
        dcreator:'',
        mthumbnail:''
    };

然后到你使用的JRss和JAtom的原型,添加以下项目循环

item.dcreator = $(this).find("dc\\:creator").eq(0).text();
item.mcontent = $(this).find("media\\:content").eq(0);
item.mdescr = $(this).find("media\\:description").eq(0).text();
item.mcredit = $(this).find("media\\:creator").eq(0).text();
item.mthumbnail = $( $(this).find("media\\:thumbnail").eq(0) ).attr("url");

希望有一天能帮助某些人在使用jQuery处理xml中的命名空间时过于挣扎。我正在使用来自纽约时报的RSSfeeds,并且需要将媒体缩略图显示在视频内容的链接中,并且必须花一些时间来弄清楚如何通过名称空间进行工作

答案 2 :(得分:0)

我有类似的问题。尝试将URL硬编码到URL中:并查看是否有效而不是设置提要变量。

您的细分结尾处有一个额外的},这只是代码的一部分吗?

答案 3 :(得分:0)

如果你想从自定义命名空间中读取内容,还有一件事:

上述('转义冒号')方法在Chrome中无法正常工作,但这种('nodeName')方法适用于所有浏览器:

item.mediaThumbnail = $($(this).find(“[nodeName = media:thumbnail]”)。eq(0))。attr(“url”);