2 Stimmen

Abrufen nur eines Teils der entfernten URL in AJAX

Ich habe versucht, bei Google zu suchen und habe auch die Dokumentation aber ohne Erfolg. Ich mache die Ajax-Anfrage in contentScript (Chrome-Erweiterung) oder auch bekannt als Greasemonkey-Skript für Firefox-Nutzer.

Eine typische Funktion zum Abrufen einer URL mit 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()
}

Sagen wir Ich brauche nur die ersten 10kb der Seite aber die whole size of page is more than 200kb . Die Seite, die ich abrufe, ist eine normale HTML-Seite. Ich möchte nicht, dass waste the bandwidth by downloading the excess 190kb . Gibt es eine Möglichkeit, dies zu erreichen? Auch, wenn das Abrufen nur ein Teil der Seite von 100kb bis 110kb möglich?

Ich bin offen für eine browserspezifische Lösung (Chrome). Und ich muss die Erweiterung auch auf Firefox portieren, also sind Ideen dazu auch willkommen.

7voto

Wladimir Palant Punkte 55387

Sie können eine Range Kopfzeile :

request.setRequestHeader("Range", "bytes=0-9999");
request.send(null);

Beachten Sie, dass der Server diese Kopfzeile möglicherweise ignoriert und Sie die übliche Antwort zurückbekommen. In den meisten Fällen wird die Antwort "206 Partial Content" lauten, allerdings mit genau 10000 Bytes an Daten. Content-Range Antwort-Header gibt an, um welchen Teil der Datei es sich handelt, z. B. request.getResponseHeader("Content-Range") könnte Ihnen bytes 0-9999/1234567 (hier ist 1234567 die Gesamtgröße der Datei).

Natürlich können Sie auch request.setRequestHeader("Range", "bytes=100000-119999"); um Daten aus der Mitte der Datei abzurufen.

1voto

PAEz Punkte 8176

Ich poste die Antwort von Rob W., damit es ein funktionierendes Beispiel für diese Frage gibt.
Der folgende Code kann verwendet werden, um die ersten 10k einer Website herunterzuladen, wie im ersten Teil der Frage beschrieben...

Angenommen, ich benötige nur die ersten 10kb der Seite

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);
}

Hinweis
Es sollte beachtet werden, dass dies nicht genau die Größe erhalten, die Sie angeben, da es keine Möglichkeit gibt, zu sagen, wie oft der Readystate aufgerufen werden wird. Außerdem erzwinge ich es, um Text sonst ihre möglicherweise nicht eine responseText sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X