我尝试在Google上搜索并阅读documentation但没有成功。我正在使用contentScript(chrome扩展名)制作ajax请求,或者以firefox用户身份称为greasemonkey脚本。
使用AJAX获取网址的典型功能
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上,所以也欢迎这方面的想法。
答案 0 :(得分:7)
您可以发送Range
header:
request.setRequestHeader("Range", "bytes=0-9999");
request.send(null);
请注意,服务器可能会忽略此标头,您将获得通常的响应。在大多数情况下,响应将是“206 Partial Content”,但只有10000字节的数据。 Content-Range
response header表示您获得的文件的哪个部分,例如request.getResponseHeader("Content-Range")
可能会为您bytes 0-9999/1234567
(此处为1234567是文件的总大小)。
显然,您也可以request.setRequestHeader("Range", "bytes=100000-119999");
从文件中间获取数据。
答案 1 :(得分:1)
重新发布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的频率。另外,我强制它是文本,否则它们可能不是responseText。