Freigeben über


Festlegen von Timeoutwerten mit „WinJS.xhr“ oder „HttpClient“ (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Wenn Sie XMLHttpRequest verwenden, können Sie Timeoutwerte direkt festlegen, bei der Verwendung von Windows.Web.Http.HttpClient oder WinJS.xhr ist dies dagegen nicht möglich. Es gibt jedoch eine Möglichkeit, Timeouts für WinJS.Promise-Objekte festzulegen. Rufen Sie WinJS.Promise.timeout auf. Damit stellen Sie sicher, dass die Anforderung abgebrochen wird, wenn sie nicht innerhalb der vorgegebenen Zeit abgeschlossen ist.

Umschließen Sie im Code aus dem XhrExample-Projekt, das unter So wird's gemacht: Herunterladen einer Datei mit "WinJS.xhr" erstellt wurde, die WinJS.xhr-Funktion mit einem Aufruf von WinJS.Promise.timeout.

Hinweis: Wenn Sie WinJS.Promise.timeout auf diese Art einsetzen, müssen Sie then verwenden, damit bei einem Fehler Promise zurückgegeben wird. Dies ist bei done nicht der Fall.

var xhrDiv = document.getElementById("xhrReport");

WinJS.Promise.timeout(1500, WinJS.xhr({ url: "https://www.microsoft.com" })
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page";
        xhrDiv.style.backgroundColor = "#00FF00";
        },
        function error(error){
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        },
        function progress(result) {
            xhrDiv.innerText = "Ready state is " + result.readyState;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#0000FF";
    }));

Wenn Sie diesen Code ausführen, sollte die Webanforderung ohne Fehler ausgeführt und das DIV-Element sollte grün werden. Sie können den Abbruch einer Anforderung simulieren, indem Sie den Wert für die Zeitüberschreitung beispielsweise auf 200 Millisekunden festlegen:

var xhrDiv = document.getElementById("xhrReport");

WinJS.Promise.timeout(200, WinJS.xhr({ url: "https://www.microsoft.com" })
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page";
        xhrDiv.style.backgroundColor = "#00FF00";
        },
        function error(error){
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        }));

Dies sollte in jedem Fall dafür sorgen, dass die Webanforderung abgebrochen wird. Das DIV-Element sollte dann rot und die Meldung "Fehler gefunden: Vorgang abgebrochen" angezeigt werden.

Anhand des Codes aus dem Projekt XhrExample können wir auch zeigen, wie ein Timeout bei der Verwendung von Windows.Web.Http.HttpClient festgelegt wird.

var xhrDiv = document.getElementById("xhrReport");

var hc = new Windows.Web.Http.HttpClient();
var uri = new Windows.Foundation.Uri("https://www.microsoft.com");
WinJS.Promise.timeout(1500, hc.getAsync(uri)
    .then(function complete(result) {
        xhrDiv.innerText = "Downloaded the page:";
        xhrDiv.style.backgroundColor = "#009900"; // Set to dark green.
        result.content.readAsStringAsync().then(function complete(str) {
            xhrDiv.innerText += "Content:" + str;
            xhrDiv.style.backgroundColor = "#00FF00"; // Set to light green.
        })
    },
        function error(error) {
            // The error thrown when xhr is canceled has a message property, not a statusText property.
            if (error.statusText)
                xhrDiv.innerHTML = "Got error: " + error.statusText;
            else
                xhrDiv.innerHTML = "Got error: " + error.message;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#FF0000";
        },
        function progress(result) {
            xhrDiv.innerText = "Ready state is " + result.readyState;
            xhrDiv.style.color = "#000000";
            xhrDiv.style.backgroundColor = "#0000FF";
        }));

Verwandte Themen

Weitere Ressourcen

Herstellen von Verbindungen mit Webdiensten

So wird's gemacht: Herunterladen einer Datei mit "WinJS.xhr"

So wird's gemacht: Hochladen von Binärdaten mit "WinJS.xhr"

Referenz

Windows.Foundation.Uri

Windows.Web.Http

Windows.Web.Http.HttpClient

WinJS.xhr

XMLHttpRequest

XMLHttpRequest-Erweiterungen

Beispiele

Beispiel für HttpClient

Integrieren von Inhalten und Steuerelementen aus dem Webdienstbeispiel

Beispiel zum Speichern und Laden von Inhalten mithilfe eines Blobs

Beispiel zur Webauthentifizierung

Beispiel zu XHR, Behandeln von Navigationsfehlern und URL-Schemas