it-swarm.com.de

Wie verwende ich getJSON, um Daten mit der Post-Methode zu senden?

Ich verwende die obige Methode und es funktioniert gut mit einem Parameter in der URL.

z.B. Students/getstud/1 Hier wird das Controller-/Aktions-/Parameterformat angewendet.

Jetzt habe ich eine Aktion im Students-Controller, die zwei Parameter akzeptiert und ein JSON-Objekt zurückgibt.

Wie poste ich Daten mit $.getJSON() mithilfe der post-Methode?

Ähnliche Methoden sind auch akzeptabel.

Es geht darum, eine Aktion der Steuerung mit AJAX aufzurufen.

102
Vikas

Die $ .getJSON () -Methode führt ein HTTP-GET und kein POST durch. Sie müssen $. Post () verwenden

$.post(url, dataToBeSent, function(data, textStatus) {
  //data contains the JSON object
  //textStatus contains the status: success, error, etc
}, "json");

In diesem Aufruf kann dataToBeSent beliebig sein. Wenn Sie jedoch den Inhalt eines HTML-Formulars senden, können Sie die serialize -Methode verwenden, um die Daten für den POST von Ihrem Formular.

var dataToBeSent = $("form").serialize();
209
Erv Walter

Dies ist meine "einzeilige" Lösung:

$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

Um jsonp und die POST -Methode zu verwenden, fügt diese Funktion der URL den GET-Parameter "callback" hinzu.

$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
   console.log(data.name);
});

Der Server muss darauf vorbereitet sein, den Callback-GET-Parameter zu verarbeiten und die json-Zeichenfolge wie folgt zurückzugeben:

jsonp000000 ({"name":"John", "age": 25});

in der "jsonp000000" der Rückruf-GET-Wert ist.

In PHP wäre die Implementierung wie folgt:

print_r($_GET['callback']."(".json_encode($myarr).");");

Ich habe einige domänenübergreifende Tests durchgeführt und es scheint zu funktionieren. Ich brauche aber noch mehr Tests.

13
lepe

Fügen Sie einfach diese Zeilen zu Ihrem <script> Hinzu (irgendwo nachdem jQuery geladen wurde, aber bevor Sie irgendetwas posten):

$.postJSON = function(url, data, func)
{
    $.post(url, data, func, 'json');
}

Ersetzen Sie (einige/alle) $.getJSON Durch $.postJSON Und genießen Sie!

Sie können die gleichen Javascript-Callback-Funktionen wie mit $.getJSON Verwenden. Es ist keine serverseitige Änderung erforderlich. (Nun, ich empfehle immer die Verwendung von $_REQUEST In PHP. http://php.net/manual/en/reserved.variables.request.php , Among $ _REQUEST , $ _GET und $ _POST welches ist das schnellste? )

Dies ist einfacher als die Lösung von @ lepe.

5
Lerin Sonberg

Ich hatte Code, der getJSON ausführte. Ich habe es einfach durch Post ersetzt. Zu meiner Überraschung hat es funktioniert

   $.post("@Url.Action("Command")", { id: id, xml: xml })
      .done(function (response) {
           // stuff
        })
        .fail(function (jqxhr, textStatus, error) {
           // stuff
        });



    [HttpPost]
    public JsonResult Command(int id, string xml)
    {
          // stuff
    } 
3

Ich habe gerade post und if verwendet:

data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
    .done(function (response) {
        if (response instanceof Object)
            var json = response;
        else
            var json = $.parseJSON(response);
        // console.log(response);
        // console.log(json);
        jsonToDom(json);
        if (json.reload != undefined && json.reload)
            location.reload();
        $("body").delay(1000).css("cursor", "default");
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log("Request Failed: " + err);
        alert("Fehler!");
    });
2
Fusca Software

$.getJSON() ist ziemlich praktisch, um eine AJAX= Anfrage zu senden und JSON-Daten als Antwort zu erhalten. Leider fehlt in der jQuery-Dokumentation eine Schwesterfunktion, die $.postJSON(). Warum nicht einfach $.getJSON() verwenden und fertig damit sein? Vielleicht möchten Sie eine große Datenmenge senden, oder in meinem Fall möchte IE7 einfach nicht richtig mit a arbeiten GET Anfrage.

Zwar gibt es derzeit keine $.postJSON() -Methode, aber Sie können dasselbe erreichen, indem Sie einen vierten Parameter (Typ) in der $.post() -Funktion angeben:

Mein Code sah so aus:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');
1
Tony