Festlegen von Timeoutwerten mit "WinJS.xhr" oder "HttpClient" (Windows-Runtime-Apps mit JavaScript und HTML)

Applies to Windows and Windows Phone

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: "http://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: "http://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("http://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

 

 

Anzeigen:
© 2014 Microsoft