Comment utiliser getJSON, envoyer des données avec la méthode post?

j'utilise la méthode ci-dessus et cela fonctionne bien avec un paramètre dans L'URL.

par exemple Students/getstud/1 où controller/action/format de paramètre est appliqué.

maintenant j'ai une action dans le contrôleur Students qui accepte deux paramètres et renvoie un objet JSON.

alors comment poster des données avec $.getJSON() en utilisant la méthode post?

des méthodes Similaires sont également acceptables.

le point est pour appeler une action du contrôleur avec AJAX.

98
demandé sur Benjamin 2009-04-15 15:15:57

7 réponses

The $.la méthode getJSON () fait un GET HTTP et non un POST. Vous devez utiliser $.post ()

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

dans cet appel, dataToBeSent pourrait être tout ce que vous voulez, bien que si vous envoyez le contenu d'un formulaire html, vous pouvez utiliser la méthode serialize pour créer les données pour le POST à partir de votre formulaire.

var dataToBeSent = $("form").serialize();
201
répondu Erv Walter 2009-04-15 12:05:37

C'est ma solution "one-line":

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

pour utiliser jsonp, et la méthode POST, cette fonction ajoute le paramètre" callback " GET à L'URL. C'est la façon de l'utiliser:

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

le serveur doit être prêt à gérer le paramètre GET de callback et à retourner la chaîne json comme:

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

dans lequel" jsonp000000 " est la valeur GET du callback.

en PHP la mise en œuvre serait comme:

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

j'ai fait quelques tests inter-domaines et ça semble marcher. Encore besoin de plus de tests.

13
répondu lepe 2014-03-07 07:32:43

il suffit d'ajouter ces lignes à votre <script> (quelque part après que jQuery a été chargé mais avant de poster quoi que ce soit):

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

remplacer (certains / tous) $.getJSON par $.postJSON et profitez!

vous pouvez utiliser les mêmes fonctions de rappel Javascript qu'avec $.getJSON . Aucun changement du côté du serveur n'est nécessaire. (Eh bien, je recommande toujours d'utiliser $_REQUEST en PHP. http://php.net/manual/en/reserved.variables.request.php , parmi $_REQUEST, $_GET et $_POST lequel est le plus rapide? )

c'est plus simple que la solution de @lepe.

5
répondu Lerin Sonberg 2017-05-23 11:55:07

j'avais un code qui faisait getJSON. J'ai simplement remplacé par la poste. À ma grande surprise, ça a marché

   $.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
répondu Stan Bashtavenko 2013-09-27 14:38:06

je viens d'utiliser le courrier et un si:

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
répondu Fusca Software 2016-11-16 11:23:20

$.getJSON() est assez pratique pour envoyer une requête AJAX et récupérer des données JSON en réponse. Hélas, la documentation de jQuery n'a pas de fonction sœur qui devrait être nommée $.postJSON() . Pourquoi ne pas simplement utiliser $.getJSON() et en finir avec elle? Eh bien, peut-être que vous voulez envoyer une grande quantité de données ou, dans mon cas, IE7 ne veut tout simplement pas travailler correctement avec une demande GET.

il est vrai, il n'y a actuellement pas de méthode $.postJSON() , mais vous pouvez accomplir la même chose en spécifiant un quatrième paramètre (type) dans la fonction $.post() :

mon code ressemblait à ceci:

$.post('script.php', data, function(response) {
  // Do something with the request
}, 'json');
1
répondu Tony 2016-08-21 19:23:58

si vous n'avez que deux paramètres, vous pouvez le faire:

$.getJSON('/url-you-are-posting-to',data,function(result){

    //do something useful with returned result//
    result.variable-in-result;
});
-8
répondu mic 2012-06-01 01:26:07