2016-06-30 19 views
0

Ich schreibe eine Web-API für GET-Methode. Diese Methode gibt das JSON-Objekt als Antwort zurück. Ich brauche eine Aktionsfiltermethode oder ein Ereignis, das automatisch aufgerufen wird, wenn der Browser die Antwort erfolgreich erhalten hat.Der Browser hat die angegebene MVC-Web-API-Antwort erfolgreich empfangen. Wie kann die Server-Seite sichergestellt werden?

+1

Benötigen Sie dieses Ereignis auf dem Server oder auf dem Client (das heißt Browser)? Definieren Sie auf dem Server "erfolgreich empfangen". –

+0

Ich brauche es auf der Serverseite. nicht auf der Client-Seite. – rafidheen

+1

Dann definieren Sie "erfolgreich erhalten". Wie ermittelt der Server, was das bedeutet? Wie von @bwyn vorgeschlagen, besteht eine Möglichkeit darin, den Client entscheiden zu lassen, was Erfolg bedeutet, und den Server über einen zusätzlichen Anruf benachrichtigen zu lassen. –

Antwort

0

Nachfolgend wurde von Professional JavaScript für Web-Entwickler (3rd Edition) von Nicholas Zakas angepasst:

Ajax Funktion:

function Ajax() { 
    var xhr, responseObj, getCompletionFunction; 
    var completionFunction; 

    this.setGetCompletionFunction = function (value) { getCompletionFunction = value; } 

    this.getRequest = function (url) { 
     completionFunction = getCompletionFunction; 
     xhr = new XMLHttpRequest(); 
     xhr.onreadystatechange = readyStateChangeFunction; 
     xhr.open("get", url, true); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
     xhr.send(null); 
    } 

    function readyStateChangeFunction() { 
     if (xhr.readyState == 4) { 
      if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { 
       responseObj = JSON.parse(xhr.responseText); 
       completionFunction(responseObj); 
      } else { 
       var errorMessage = xhr.status; 
       responseObj = { errorMessages: ["An error of type " + errorMessage + " occurred while attempting to reach the server."] }; 
       completionFunction(responseObj); 
      } 
     } 
    } 
} 

Die Linie von Interesse ist:

if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) { 

Dies legt fest, ob der Web-API-Aufruf erfolgreich war. Wenn dies der Fall ist, analysiert die Funktion die Antwort und gibt sie in den Rückruf ein. Andernfalls wird eine Fehlermeldung an den Rückruf zurückgegeben.

Beispiel der Ajax-Funktion verwenden:

var ajax = new Ajax(); 

var completionFunction = function (data) { 
    var returnedData = data; 
} 

ajax.setGetCompletionFunction(completionFunction); 

ajax.getRequest("/api/Home/1"); 
+0

Danke für die Antwort. Aber irgendwelche Möglichkeiten, das auf Serverseite zu bekommen? – rafidheen

+1

Ich denke, deine beste Wette wäre, einen zusätzlichen Ajax-Anruf vom Rückruf an den Server zu senden – bwyn