web-dev-qa-db-fra.com

Comment utiliser getJSON, l'envoi de 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 paramètres et renvoie un objet JSON.

Alors, comment puis-je publier 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.

102
Vikas

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

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

Ceci 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 GET "callback" à l'URL. Voici comment 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 de rappel GET et à renvoyer la chaîne json sous la forme:

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

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

Dans PHP, la mise en oeuvre ressemblerait à ceci:

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

J'ai fait des tests inter-domaines et cela semble fonctionner. Encore besoin de plus de tests cependant.

13
lepe

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

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

Remplacer (certains/tous) $.getJSON avec $.postJSON et apprécie!

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. 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
Lerin Sonberg

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, string xml)
    {
          // stuff
    } 
3
Stan Bashtavenko

Je viens d'utiliser post et un if:

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() est très pratique pour envoyer une requête AJAX et récupérer les données JSON sous forme de réponse. Hélas, la documentation jQuery n'a pas de fonction sœur qui devrait s'appeler $.postJSON(). Pourquoi ne pas simplement utiliser $.getJSON() et en finir? Eh bien, vous voulez peut-être envoyer une grande quantité de données ou, dans mon cas, IE7 ne veut tout simplement pas fonctionner correctement avec un Demande GET.

Il est vrai qu'il n'y a actuellement aucune 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
Tony