【问题标题】:jFeed - sucess function not being executed (jQuery plugin)jFeed - 未执行成功功能(jQuery 插件)
【发布时间】:2010-10-14 07:15:57
【问题描述】:

我有以下 Javascript 代码,其中 feed 是 rss feed 的有效 url。

jQuery(function() {

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

当我运行它时,警报永远不会出现。使用 firebug 我可以看到正在建立的连接以及来自提要的响应。

注意:我知道这是一个安全问题,一些浏览器会阻止它,但目前情况并非如此,因为我已经解决了这个问题并且浏览器不再阻止连接

编辑:由于某种原因,我无法在此处显示评论:

该调用目前没有被脚本代理,因为这是一个测试,我只是覆盖了浏览器安全设置:

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

【问题讨论】:

  • 您使用的是哪个版本的 jQuery?如果是 1.3+,请尝试降到 1.2.6 并重试。
  • 我正在使用 1.3.2,但我已经尝试使用 1.2.6,现在我什至看不到对 feed url 的调用

标签: jquery jquery-plugins jfeed


【解决方案1】:

我遇到了类似的问题。尝试将 URL 硬编码到 url: 中,看看是否可行,而不是设置提要变量。

你的段末尾有一个额外的 },这只是你代码的一个额外部分吗?

【讨论】:

  • 这并不能解决问题,是的,额外的 } 来自以前的代码
【解决方案2】:

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

    $.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);
        }
    });

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


我已经运行了一些测试并检查了 jQuery 代码。您说您解决了浏览器安全问题:我猜您在服务器上安装了一个代理脚本,该脚本将从远程服务器下载 rss 文件,然后将其传输到您的 ajax 请求(因为浏览器会阻止 ajax 调用服务器与您的页面所在的服务器不同)。当使用 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);
}
?>

【讨论】:

  • 什么也没发生,我什至给那个函数添加了警报,但什么也没发生
  • 这意味着ajax调用永远不会成功,那么与jFeed无关?您可以尝试将数据类型更改为“文本”吗? (不需要使用jQuery.getFeed,直接调用$.ajax即可)
  • 如果我将该数据类型更改为文本,则 ajax 调用成功并显示警报,当我恢复我们所做的第一次更改时,我现在可以按预期使用提要。这可能是 RSS 提要中的问题吗?
  • dataType : "text" 告诉 jQuery 按原样为您提供数据,它只是通过 ajax 调用检查所有内容。 dataType : "xml" 告诉 jQuery 将调用结果作为 xml 处理,它似乎失败了。您可以发布 ajax 调用的结果以确保它是有效的 xml 吗?
【解决方案3】:

对于那些需要从具有自定义命名空间的提要中获取内容的人来说,使用 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 中的命名空间时遇到困难的人。我正在使用 NYT 的 RSSfeeds,需要让媒体缩略图显示在视频内容的链接中,并且不得不花一些时间来弄清楚如何通过命名空间工作

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多