Comment utiliser getJSON, en envoyant 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é.

J’ai maintenant une action dans le contrôleur Students qui accepte deux parameters et renvoie un object JSON.

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

Des méthodes similaires sont également acceptables.

Il s’agit d’appeler une action du contrôleur avec AJAX.

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, même si vous envoyez le contenu d’un formulaire html, vous pouvez utiliser la méthode serialize pour créer les données du POST à ​​partir de votre formulaire.

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

Ceci est ma solution “une ligne”:

 $.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 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éparé pour gérer le paramètre GET de rappel et renvoyer la chaîne json en tant que:

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

dans lequel “jsonp000000” est la valeur GET de rappel.

En PHP, l’implémentation serait comme:

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

J’ai fait des tests interdomaines et cela semble fonctionner. Encore besoin de plus de tests cependant.

Ajoutez simplement ces lignes à votre (quelque part après le chargement de jQuery mais avant de publier quoi que ce soit):

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

Remplacez (certains / tous) $.getJSON par $.postJSON et profitez-en!

Vous pouvez utiliser les mêmes fonctions de rappel Javascript qu'avec $.getJSON . Aucun changement côté serveur n'est nécessaire. (Eh bien, je recommande toujours d'utiliser $_REQUEST en PHP. $_REQUEST , Parmi $ _REQUEST, $ _GET et $ _POST, lequel est le plus rapide? )

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

J’ai eu le code qui faisait getJSON. Je l’ai simplement remplacé par post. À 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, ssortingng xml) { // stuff } 

Je viens d’utiliser post 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!"); }); 

$.getJSON() est très pratique pour envoyer une requête AJAX et récupérer des données JSON en réponse. Hélas, la documentation de jQuery ne possède pas de fonction sœur qui devrait s’appeler $.postJSON() . Pourquoi ne pas simplement utiliser $.getJSON() et en avoir fini avec? 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 requête GET.

C’est vrai, il n’y a actuellement aucune $.postJSON() , mais vous pouvez accomplir la même chose en spécifiant un quasortingème paramètre (type) dans la fonction $.post() :

Mon code ressemblait à ceci:

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

Si vous avez juste deux parameters, vous pouvez le faire:

 $.getJSON('/url-you-are-posting-to',data,function(result){ //do something useful with returned result// result.variable-in-result; });