如何统计网页字符数?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>
为什么这么改?
- 添加
req.send():这是触发请求的关键步骤,没有它,XHR只是初始化了请求配置,根本没去拉取网页内容。 - 改用异步请求+回调:避免阻塞浏览器主线程,用户点击按钮后不会出现页面卡住的情况,同时回调函数里处理响应也更符合现代JS的写法。
- 正确访问响应文本长度:
responseText才是XHR返回的网页内容字符串,它的length属性就是你要的字符数。 - 增加错误处理:不管是请求失败还是网络错误,都给用户明确的提示,也方便你后续调试扩展功能。
这样修改后,你既保留了XMLHttpRequest的代码,能顺利统计字符数,后续扩展关键词解析功能也完全没问题,直接在onload的成功回调里对responseText做字符串处理就好啦。
内容的提问来源于stack exchange,提问作者DED1
相关产品推荐
相关产品推荐

