Unterschied zwischen $ .getJSON () und $ .ajax () in jQuery
Rufe ich eine ASP.NET MVC-Aktion
public JsonResult GetPatient(string patientID)
{
...
in JavaScript mit jQuery. Der folgende Aufruf funktioniert
$.getJSON(
'/Services/GetPatient',
{ patientID: "1" },
function(jsonData) {
alert(jsonData);
});
in der Erwägung, dass diese einen nicht.
$.ajax({
type: 'POST',
url: '/Services/GetPatient',
data: { patientID: "1" },
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(jsonData) {
alert(jsonData);
},
error: function() {
alert('Error loading PatientID=' + id);
}
});
Beide erreichen die action-Methode, aber die patientenkennung Wert ist null, w/$.ajax-Aufruf. Ich würde gerne die $.ajax-call für einige der erweiterten Rückrufe.
Irgendwelche Gedanken sehr geschätzt.
InformationsquelleAutor der Frage ChrisP | 2009-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Content-type
Brauchen Sie nicht, um anzugeben, dass der content-type auf Anrufe zu MVC-controller-Aktionen. Die spezielle "application/json; charset=utf-8" content-type ist nur notwendig, wenn die Berufung ASP.NET AJAX "ScriptServices" und Seite Methoden. jQuery-das Standard-contentType "application/x-www-form-urlencoded" ist geeignet für die Beantragung eines MVC-controller-action.
Mehr über das content-type-hier: JSON-Hijacking und Wie ASP.NET AJAX 1.0 Vermeidet diese Angriffe
Daten
Daten ist korrigieren, wie Sie es haben. Durch die übergabe jQuery JSON-Objekt, wie Sie haben, Sie werden serialisiert als patientenkennung=1 in der POST-Daten. Diese standard-form ist, wie MVC erwartet, dass die Parameter.
Sie nur haben, schließen Sie den Parameter in Anführungszeichen wie "{ 'patientenkennung' : 1 }", wenn Sie mit ASP.NET AJAX-Dienste. Sie erwarten, dass eine einzelne Zeichenfolge, die ein JSON-Objekt geparst heraus, anstatt die einzelnen Variablen in der POST-Daten.
JSON
Es ist nicht ein problem in diesem speziellen Fall, aber es ist eine gute Idee zu bekommen in die Gewohnheit, die Angabe von string-Schlüssel oder Werte in Ihrer JSON-Objekt. Wenn Sie versehentlich ein JavaScript reserviertes Schlüsselwort als Schlüssel oder Wert in das Objekt, ohne zu zitieren, ist, dass man in ein verwirrend-zu-debug-problem.
Umgekehrt, Sie haben nicht zu zitieren, numerische oder Boolesche Werte. Es ist stets sicher zu verwenden, die Sie direkt in das Objekt.
So, vorausgesetzt, Sie wollen die POST anstelle von GET,$.ajax () - Aufruf könnte wie folgt Aussehen:
InformationsquelleAutor der Antwort Dave Ward
.getJson ist einfach nur ein wrapper um .ajax bietet aber eine einfachere Methode, Signatur, wie einige der Einstellungen sind voreingestellt.e.g dataType, json type zu bekommen etc
N. B .Last .Holen Sie sich und .post sind auch einfache Wrapper um die .ajax-Methode.
InformationsquelleAutor der Antwort redsquare
Ersetzen
mit
Weiter Lesen: 3 Fehler zu vermeiden bei der Verwendung von jQuery mit ASP.NET
InformationsquelleAutor der Antwort rpcutts
Es gibt viel Verwirrung in einigen der Funktion von jquery $.ajax, $.get, $.post, $.getScript, $.getJSON, dass das, was ist der Unterschied zwischen Ihnen, welche ist die beste, welche ist die schnelle, was zu verwenden, und wenn so, hier ist die Beschreibung von Ihnen, um Ihnen klar zu entledigen und diese Art von Verwirrungen.
$.gettJSON () - Funktion ein Kürzel Ajax-Funktion (intern $.get() mit Daten-Typ-Skript), das entspricht unten Ausdruck, Verwendet einige begrenzte Kriterien wie Art der Anfrage GET und Datentyp json.
Mehr Lesen .. jquery-post-vs-get-vs-ajax
InformationsquelleAutor der Antwort Vivek
Der einzige Unterschied, den ich sehe, ist, dass getJSON führt eine GET-Anforderung statt einer POST.
InformationsquelleAutor der Antwort kgiannakakis
Ist nicht gut. Zumindest ist es nicht für mich arbeiten. Die andere syntax ist ok. Die parameter, die Sie liefern, ist im richtigen format.
InformationsquelleAutor der Antwort Mathias F
$.getJSON ()), gibt es kein Fehler-callback-nur können Sie verfolgen, gelingt Rückruf und es gibt keine standard-Einstellung unterstützt, wie beforeSend, statusCode, mimeType usw., wenn Sie es wollen, benutzen Sie $.ajax().
InformationsquelleAutor der Antwort varmabsrk