You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery解析网站RSS数据时遇错误,请求协助排查

帮你排查jQuery获取RSS数据的几个常见问题

嘿,我看了你的代码,大概率是这几个地方出了问题,咱们一个个来捋:

1. 跨域请求被拦截(最常见的坑)

浏览器有个同源策略,不允许前端直接请求不同域名的资源,除非目标网站设置了CORS允许你的域名访问。你直接用$.ajax请求这个RSS地址,浏览器肯定会拦下来,这也是那个alert("An error occurred.")弹出来的主要原因。

怎么解决?

  • 搞个后端代理:在你自己的服务器上写个小接口,让服务器先去请求这个RSS源,再把数据返回给前端。前端请求自己的服务器,就不会有跨域问题了。
  • 要是不想搞后端,也可以看看这个RSS源支不支持JSONP格式,但这个源是XML的,大概率不支持,所以还是后端代理靠谱。

2. XML命名空间的处理不对

RSS里的content:encoded是带命名空间的标签,你用content\\:encoded在有些浏览器里可能识别不到。换个写法试试:用[nodeName="content:encoded"]来定位这个元素,兼容性更好。

3. 处理HTML内容时犯了小错

你拿到content:encoded的HTML后,直接用$html.find('ul')是不行的——因为.html()返回的是字符串,不是jQuery对象。得先把这个字符串转换成jQuery对象,再去查找里面的元素。

修正后的代码参考

// 注意:没解决跨域的话,这个代码还是会报错哦
$.ajax({
    type: "GET",
    url: "https://tuhoc247.com/feed/",
    dataType: "xml",
    success: function (xml) {
        $(xml).find('item').each(function () {
            // 输出标题和链接
            console.log("title : " + $(this).find("title").text());
            console.log("link : " + $(this).find("link").text());
            
            // 正确处理带命名空间的content:encoded
            var encodedHtml = $(this).find('[nodeName="content:encoded"]').html();
            // 把字符串转成jQuery对象再查找元素
            var $content = $(encodedHtml);
            console.log($content.find('ul').text());
        });
    },
    error: function (xhr, status, error) {
        // 别只弹alert,把错误信息打出来才好排查
        console.error("请求出错啦:", status, error);
        alert("An error occurred.");
    }
});

小建议

打开浏览器的开发者工具(按F12),切换到「Network」标签,看看这个请求的状态码和错误详情,能更快定位问题——比如跨域的话会显示CORS相关的错误提示。

内容的提问来源于stack exchange,提问作者Huynh Nhọn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:26:03