Sys.Net.XmlHttpExecutor executeRequest-Methode

Aktualisiert: November 2007

Führt eine Webanforderung aus, wie in der zugehörigen WebRequest-Instanz angegeben.

MyExecutor.executeRequest;

Ausnahmen

Ausnahmetyp

Bedingung

Sys.InvalidOperationException

Die executeRequest-Methode wurde nach dem Start der Anforderung erneut aufgerufen.

- oder -

Der Executor ist keiner Instanz der WebRequest-Klasse zugeordnet.

Hinweise

Um eine Webanforderung auszuführen, sollten Sie die executeRequest-Methode nicht direkt aufrufen. Rufen Sie stattdessen die WebRequest.invoke-Methode oder die WebRequestManager.executeRequest-Methode auf. Die executeRequest-Methode ist für künftige Erweiterungen oder für die Verwendung mit benutzerdefinierten Executors vorgesehen.

Tipp

Wenn Sie die executeRequest-Methode des Executors direkt aufrufen, wird die Webanforderung nicht von der WebRequestManager-Instanz verwaltet. Daher werden Handler, die durch Aufrufen der add_completedRequest-Methode oder der add_invokingRequest-Methode der WebRequestManager-Klasse hinzugefügt werden, nicht aufgerufen.

Wenn Sie die executeRequest-Methode aufrufen, erstellt und sendet der Executor unter Verwendung des HTTP-Verbs, der HTTP-Header und des Anforderungstexts, die für die zugehörige WebRequest-Instanz angegeben wurden, eine HTTP-Anforderung. Der Executor sendet die HTTP-Anforderung mithilfe des XMLHTTP-Objekts des Browsers. Weitere Informationen finden Sie unter About Native XMLHTTP.

Wenn der Content-Type-Header des zugeordneten Anforderungsobjekts nicht festgelegt wird, wird er vom Executor für eine POST-HTTP-Anforderung auf application/x-www-form-urlencoded festgelegt, was der Standardeinstellung entspricht. Wenn kein Anforderungstext festgelegt wurde, der Browser jedoch einen Anforderungstext erfordert, legt der Executor den Text automatisch auf eine leere Zeichenfolge ("") fest. Dadurch wird der Browser gezwungen, einen Content-Length-Header zu senden. Der Executor stellt sicher, dass der abgeschlossene Ereignishandler der Webanforderung bei Bedarf aufgerufen wird.

Nachdem executeRequest aufgerufen wurde, kann sich der Executor in einem der folgenden Zustände befinden:

  • Gestartet. Nachdem der Aufruf vom Executor an das XMLHTTP-Objekt im Browser übermittelt wurde, wird die XmlHttpExecutor.started-Eigenschaft auf true festgelegt. Wenn ein Executor aktiv ist, bleibt er für die Lebensdauer der Instanz aktiv.

  • Abgeschlossen. Wenn der XMLHTTP-Aufruf erfolgreich ausgeführt wurde, werden die XmlHttpExecutor.started-Eigenschaft und die die XmlHttpExecutor.responseAvailable-Eigenschaft auf true festgelegt.

    Eine Netzwerkanforderung wird als vollständig abgeschlossen betrachtet, wenn das XMLHTTP-Objekt des Browsers die Steuerung an den internen Abschlusshandler des Executors zurückgibt. Im Statuscode, Statustext oder Antworttext könnte jedoch angegeben sein, dass während der Anforderung ein Fehler aufgetreten ist. Der aufrufende Code ist dafür verantwortlich, die Antwortinformationen zu überprüfen und festzustellen, ob die Anforderung gültige Daten zurückgegeben hat. Beispielsweise liegt es in der Verantwortung des Elements, durch das Webdienste behandelt werden, diese Informationen zu überprüfen und zu bestimmen, ob während des Aufrufs des Diensts ein Fehler aufgetreten ist.

  • Zeitlimit überschritten. Wenn für die zugeordnete Anforderung ein Timeoutwert ungleich Null festgelegt war und das Zeitlimit abläuft, ohne dass ein anderes Abschlussereignis auftritt, wird der Zustand vom Executor auf ein überschrittenes Zeitlimit festgelegt. Dies weist darauf hin, dass der Netzwerkaufruf nicht rechtzeitig abgeschlossen und der Executor nicht abgebrochen wurde. Die started-Eigenschaft und die timedOut-Eigenschaft der Executorinstanz werden auf true festgelegt.

    Tipp

    Wenn für die Anforderung ein Timeoutwert gleich Null festgelegt war und die XMLHTTP-Anforderung abläuft, wird der Zustand vom Executor auf abgeschlossen festgelegt. Anschließend wird das abgeschlossene Ereignis des Anforderungsobjekts ausgelöst. Dies bedeutet, dass die started-Eigenschaft und die responseAvailable-Eigenschaft der Executorinstanz true zurückgeben. Der aufrufende Code ist dafür verantwortlich, den Statuscode des Executors daraufhin zu überprüfen, ob gültige Daten verfügbar sind, selbst wenn die Anforderung abgeschlossen ist.

Wenn bei Erreichen des Abschlusszustands (abgeschlossen oder Zeitlimit überschritten) keine Ereignishandler vorhanden sind, führt der Executor interne Bereinigungen aus, und es erfolgt eine automatische Rückgabe.

Tipp

Sie können executeRequest nicht mehrmals aufrufen, nachdem die started-Eigenschaft auf true festgelegt wurde. Wenn das XMLHTTP-Objekt nach dem Aufruf der executeRequest-Methode jedoch eine Ausnahme auslöst, können Sie versuchen, das Problem zu beheben und executeRequest erneut aufrufen.

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine Webanforderung mithilfe der executeRequest-Funktion ausgeführt wird. Dieser Code ist Teil eines vollständigen Beispiels, das in der Übersicht über die Sys.Net.XmlHttpExecutor-Klasse enthalten ist.

// This function executes a Web request.
function ExecuteWebRequest()
{
    // Create the WebRequest object.
    wRequest =  new Sys.Net.WebRequest();

    // Set the request Url.  
    wRequest.set_url("getTarget.htm");


    // Set the Completed event handler, for processing return data
    wRequest.add_completed(OnCompleted);

      // Clear the results area.
    resultElementId.innerHTML = "";

    // To use executeRequest you must instantiate the
    // executor, assign it to the Web request instance,
    // then call the executeRequest function.
    // Note: Normally to make a Web request you use
    // the invoke method of the WebRequest instance.
    var executor = new Sys.Net.XMLHttpExecutor();
    wRequest.set_executor(executor); 
    executor.executeRequest();

    var started = executor.get_started();

    alert("Executor started: " + started);
}

Siehe auch

Referenz

Sys.Net.WebRequestManager-Klasse

Sys.Net.WebRequestExecutor-Klasse

Sys.Net.XMLHttpExecutor-Klasse

Weitere Ressourcen

About Native XMLHTTP