106 votes

Comment utiliser getJSON, pour 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ù le format contrôleur/action/paramètre est appliqué.

Maintenant, j'ai une action dans le contrôleur des étudiants qui accepte deux paramètres et renvoie un objet JSON.

Alors comment puis-je afficher des données avec $.getJSON() en utilisant la méthode post ?

Des méthodes similaires sont également acceptables.

Le but est d'appeler une action du contrôleur avec AJAX.

214voto

Erv Walter Points 6756

La méthode $.getJSON() effectue un HTTP GET et non 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 peut être tout ce que vous voulez, mais si vous envoyez le contenu d'un formulaire html, vous pouvez utiliser la balise sérialiser pour créer les données pour le POST de votre formulaire.

var dataToBeSent = $("form").serialize();

13voto

lepe Points 8959

C'est ma solution "en une ligne" :

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

Afin d'utiliser jsonp, et la méthode POST, cette fonction ajoute le paramètre GET "callback" à 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 à traiter le paramètre GET de la fonction de rappel et à renvoyer la chaîne json sous la forme :

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

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

En PHP, l'implémentation serait la suivante :

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

J'ai fait quelques tests inter-domaines et cela semble fonctionner. J'ai encore besoin de plus de tests.

3voto

StanB Points 108

J'avais un code qui faisait du getJSON. Je l'ai simplement remplacé par post. À ma grande surprise, cela a fonctionné

   $.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
    }

-7voto

mic Points 11

Encore une fois, vous pouvez le faire :

$.getJSON('/url-you-are-posting-to/'+param1+ '/'+ param2,null,function(result){

     //do something useful with returned result//
      result.variable-in-result;  // result is json structure returned//
});

ce qui n'est pas forcément très élégant

-8voto

mic Points 11

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;
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X