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

如何统计网页字符数?XMLHttpRequest获取长度返回undefined求助

问题修复:XMLHttpRequest获取网页字符数返回undefined的解决办法

嘿,我看了你的代码,立刻发现了两个导致你拿到undefined的关键问题,而且完全不用移除你想要保留的XMLHttpRequest代码,修复起来很简单:

核心问题点

  • 你根本没发送请求:XMLHttpRequest只调用open()是不够的,必须调用send()才能让浏览器真正发起HTTP请求去获取页面内容。
  • 属性访问错误:你试图访问req.length,但XHR对象本身没有这个属性,你需要的是返回的网页文本长度,也就是req.responseText.length。

另外,同步请求(第三个参数设为false)虽然能工作,但会卡住浏览器直到请求完成,体验不太好,我推荐改用异步方式,同时加一些错误处理让代码更健壮,方便你后续扩展关键词解析的功能。

修复后的完整代码

<!DOCTYPE html>
<html>
<body>
<p>Click the button to open a new browser window.</p>
<button onclick="myFunction()">Try it</button>
<script>
function myFunction() {
    // 打开目标网页
    window.open("https://www.gutenberg.org/files/1065/1065-h/1065-h.htm");
    
    var req = new XMLHttpRequest();
    // 用异步请求,第三个参数设为true(默认也是true,写出来更清晰)
    req.open('GET', 'https://www.gutenberg.org/files/1065/1065-h/1065-h.htm', true);
    
    // 请求成功完成时的回调
    req.onload = function() {
        // 先判断请求状态是否成功
        if (this.status >= 200 && this.status < 300) {
            // 获取网页文本的字符数
            const charCount = this.responseText.length;
            alert(`目标网页的字符数:${charCount}`);
            
            // 后续要做关键词解析的话,直接在这里处理this.responseText就行
            // 比如:const keywordMatches = this.responseText.match(/你的关键词/g);
        } else {
            alert('请求失败啦,没法获取网页内容');
        }
    };
    
    // 处理网络错误的情况
    req.onerror = function() {
        alert('网络出错了,连不上目标网页');
    };
    
    // 发送请求!这一步之前你漏掉了
    req.send();
}
</script>
</body>
</html>

为什么这么改?

  1. 添加req.send():这是触发请求的关键步骤,没有它,XHR只是初始化了请求配置,根本没去拉取网页内容。
  2. 改用异步请求+回调:避免阻塞浏览器主线程,用户点击按钮后不会出现页面卡住的情况,同时回调函数里处理响应也更符合现代JS的写法。
  3. 正确访问响应文本长度:responseText才是XHR返回的网页内容字符串,它的length属性就是你要的字符数。
  4. 增加错误处理:不管是请求失败还是网络错误,都给用户明确的提示,也方便你后续调试扩展功能。

这样修改后,你既保留了XMLHttpRequest的代码,能顺利统计字符数,后续扩展关键词解析功能也完全没问题,直接在onload的成功回调里对responseText做字符串处理就好啦。

内容的提问来源于stack exchange,提问作者DED1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:31