2016-04-13 6 views
0

Korrigieren Sie mich, wenn ich falsch liege, aber es war mein Verständnis, dass ein POST verwendet werden sollte, wenn ich Daten änderte, und ein GET sollte verwendet werden, wenn ich abrufen möchte Daten.Versuchen, JQuery/Ajax Get/POST Anrufe zu verstehen

Basierend auf dieser Annahme.

Ich habe (MVC5) App.

Mein JavaScript

function MyLoadData(myValue) { 
    $.ajax({ 
     method: 'POST', 
     url: '/Home/GetMyData', 
     contentType: 'application/json', 
     dataType: 'json', 
     data: JSON.stringify({ "MyValue": myValue}), 
     success: function (data) { 
      // Do Stuff 
     }      
    }); 

und mein Controller.

public JsonResult GetMyData(string myValue) 
     { // Do Stuff } 

Dies funktioniert nur, wenn ich die Methode festgelegt: ‚POST‘, wenn ich es ‚GET‘ gesetzt wird es noch den Server anrufen, aber nicht den myValue an die Steuerung übergeben.

Außerdem gibt es keine Daten Annotation für die GetMyData-Methode.

In diesem Szenario sollte ich nicht GET verwenden, um meine Daten vom Controller zu bekommen?

ergänzt Kommentare basiert:

function MyLoadData(myValue) { 
    $.ajax({ 
     method: 'POST', 
     url: '/Home/GetMyData', 
     dataType: 'json', 
     data: { "MyValue": myValue}, 
     success: function (data) { 
      // Do Stuff 
     }      
    }); 
+1

Ihrem Browser Werkzeuge Verwenden Sie die aktuelle Anfrage (und URL mit Parametern), um zu sehen, die gesendet wird. Versuchen Sie nicht, die Daten zu "stringifizieren", wenn Sie eine GET-Anfrage durchführen. –

+0

Warum setzen Sie contentType auf 'application/json'? Dies ist der Inhaltstyp der Daten, die Sie senden. Die Standardanwendung/x-www-form-urlencoded ist wahrscheinlich für Ihre Zwecke in Ordnung. Ie. Lass diese Linie einfach weg. Sonst - was passiert, wenn Sie Ihren Controller direkt vom Browser mit einer Abfragezeichenfolge aufrufen? MyValue = abc? –

Antwort

1

Sowohl die Methoden POST als auch GET können den myValue an den Controller übergeben.

  • GET - Anfragen von Daten aus einer bestimmten Ressource
  • POST - Senden Daten zu einer bestimmten Ressource verarbeitet werden

GET im Grunde nur für immer (Abrufen) einige Daten aus dem verwendet wird, Server. Hinweis: Die GET-Methode kann zwischengespeicherte Daten zurückgeben.

POST kann auch verwendet werden, um einige Daten vom Server zu erhalten. Das POST-Verfahren zwischenspeichert jedoch NIE Daten und wird häufig zum Senden von Daten zusammen mit der Anforderung verwendet.

+0

Ich habe meinen Anruf aufgeräumt, siehe oben. Allerdings muss ich immer noch den POST verwenden, damit diese Methode funktioniert. Ich werde auf Fiddlr nachlesen müssen, da ich nicht sicher bin, wie ich die tatsächliche Anfrage testen soll. Allerdings kann ich auf der Serverseite überprüfen, dass myValue an den Controller übergeben wird, die JSON-Daten werden jedoch nicht an den Client zurückgegeben. (dh es trifft nie meine Fertig- oder Erfolgsmethode). Nur wenn ich die Methode auf POST einstelle, wird es funktionieren. – PrivateJoker

+0

AH! Ich habe vergessen, AllowGet in der Steuerung hinzuzufügen .... return Json (myData, JsonRequestBehavior.AllowGet); – PrivateJoker

+0

Netter Versuch. Bien joué! –

0

Der primäre Unterschied zwischen einem GET und einem POST ist, dass die POST auch die Formulardaten übermitteln. In Ihrem Beispiel können Sie ein GET verwenden, indem Sie ?MyValue=<myValue> an Ihre URL anhängen und WebAPI den Wert dem Parameter Action zuweisen.

0

Wenn die GET-Anforderung dann diesen Codeblock verwenden arbeiten muss:

function MyLoadData(myValue) { 
$.ajax({ 
    method: 'GET', 
    url: '/Home/GetMyData?myValue=test', 
    success: function (data) { 
     // Do Stuff 
    }      
}); 

Grundsätzlich können Sie verwenden GET oder POST die Daten zu erhalten. In GET werden die Daten jedoch über die Abfragezeichenfolge übergeben. In POST kann es sowohl durch Abfragezeichenfolge als auch durch Text übergeben werden.

Ein reales Szenario, wenn POST verwendet werden soll - Wenn Ihre Methode Customer-Parameter erwartet und Sie Customer-Objekt als Parameter senden müssen, können Sie die JSON-Repräsentation des Customer-Objekts durch body.but aber nicht über GET senden.

Ein weiterer Grund ist Sicherheit, wenn Sie GET verwenden, kann Ihre Methode über Browser aufgerufen werden. Wenn Sie jedoch POST verwenden, kann die Methode nicht direkt aufgerufen werden.

Dies waren die wichtigsten difference.For mehr Unterschiede auf diesen Link sehen - http://www.diffen.com/difference/GET_(HTTP)_vs_POST_(HTTP)

Verwandte Themen