在AJAX中只检索远程URL的一部分
Retrieve only a part of remote URL in AJAX
我试过在谷歌上搜索,也读过文档,但没有成功。我是在contentScript(chrome扩展)中发出ajax请求的,或者是为firefox用户提供的另一种称为greatemonkey的脚本。
使用AJAX、获取URL的典型功能
function getURL(url, element)
{
var request = new XMLHttpRequest();
request.onreadystatechange = function()
{
if ( request.readyState == 4 )
{
callback( request.responseText, element, request.status );
}
};
request.open( "GET", url, true );
request.send()
}
比方说我只需要页面的前10kb,但需要whole size of page is more than 200kb
。我正在检索的页面是一个普通的HTML。我不想waste the bandwidth by downloading the excess 190kb
。有什么办法做到这一点吗?此外,如果只检索100kb到110kb页面的一部分是可能的?
我对浏览器特定的解决方案(chrome)持开放态度。我还必须将扩展移植到Firefox,所以对此的想法也很受欢迎。
您可以发送Range
标头:
request.setRequestHeader("Range", "bytes=0-9999");
request.send(null);
请注意,服务器可能会忽略此标头,您将得到通常的响应。在大多数情况下,响应将是"206部分内容",但数据正好为10000字节。Content-Range
响应标头指示您得到的是文件的哪一部分,例如request.getResponseHeader("Content-Range")
可能会给您bytes 0-9999/1234567
(此处1234567是文件的总大小)。
显然,您也可以使用request.setRequestHeader("Range", "bytes=100000-119999");
从文件中间获取数据。
重新回答Rob W的答案,这样就有了这个问题的工作示例
根据问题的第一部分,以下代码可以用于下载网站html的前10k。。。
假设我只需要页面的前10kb
function getURL(url, limit, callback) {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if ( request.readyState == 4 ) {
if (request.responseText!=0) callback( request.responseText, request.status );
} else if (request.responseText.length >= limit) {
// If limit is exceeded
var result = request.responseText;
request.abort(); // Cancel request
callback( result, request.status );
}
};
request.overrideMimeType("text/html");
request.open( "GET", url, true );
request.send();
}
getURL('http://www.google.com.au', 100000, debug);
//getURL('http://paez.kodingen.com/testy.png', 100000, debug);
function debug(responseText, status) {
console.debug('length of responseText '+responseText.length);
console.debug('responseStatus : '+status);
console.debug('responseText :'n'+responseText);
}
注意
需要注意的是,这不会得到你指定的大小,因为他们无法说明readystate的调用频率。此外,我强迫它是文本,否则它们可能不是响应文本。
- Regex提取URL返回数组的一部分;未定义”;
- 如何使用JavaScript提取此url的一部分
- 如何抓取URL的一部分并将其粘贴到页面上的某个位置
- 尝试在 jquery ajax 帖子中将变量设置为URL 的一部分
- 删除在单击其他选项卡时生成的url查询元素的一部分
- 如何使用 JavaScript 更改 URL 的一部分
- 如何使用 JavaScript 删除 URL 的一部分
- 有没有更好的方法来匹配 JavaScript 中 URL 路径名的一部分
- (Javascript)如何提取当前URL的最后一部分 - 没有文件扩展名
- 如何使用 jQuery 从 URL 中删除 URL 的一部分
- 仅获取当前URL的一部分并使用JavaScript重定向
- 使用 Javascript 获取当前 URL 的一部分
- 如何使用正则表达式或 jQuery 检索 URL 的最后一部分
- 在 Javascript 中获取 url 的最后一部分
- 如何使用文本表单输入的一部分来添加并使其转到 URL
- Yii2 中有什么方法可以在不重新加载的情况下动态更改 URL?来自 PJAX 的一部分
- 用于拆分 URL 和删除最后一部分的 JavaScript
- 将URL的一部分传递给AngularJS中的自定义筛选器
- 在AJAX中只检索远程URL的一部分
- 基于用户输入替换iFrame URL的一部分