349 votes

JQuery - comment faire $.post() utiliser contentType = application/json ?

J'ai remarqué que lors de l'utilisation de $.post() en jquery que le défaut contentType est application/x-www-form-urlencoded - quand mon asp.net mvc code doit avoir contentType=application/json

(Voir cette question de pourquoi je dois utiliser une application/json: http://stackoverflow.com/questions/2792603/aspnet-mvc-why-is-modelstate-isvalid-false-the-x-field-is-required-when-that)

Comment puis-je faire $.post() envoyer contentType=application/json? J'ai déjà un grand nombre de dollars.post (), alors je ne veux pas changer de $.ajax (), car il faudrait trop de temps

Si j'essaie

$.post(url, data, function(), "json") 

Il a encore contentType= " application/x-www-form-urlencoded. Donc exactement ce que fait le "json" param faire si il ne change pas le contenttype en json?

Si j'essaie

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

Qui fonctionne, mais qui touche chaque $.obtenir et $.après que j'ai et certaines causes de rupture.

Donc, est-il un moyen que je puisse changer le comportement de $.post() pour envoyer contentType=application/json?

420voto

Adrien Points 5142
<pre><code></code><p><a href="http://api.jquery.com/jQuery.ajax/">jQuery.Ajax</a></p></pre>

101voto

vvkatwss vvkatwss Points 421

Finalement j'ai trouvé la solution, ça marche pour moi:

 jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: JSON.stringify({data:"test"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});
 

77voto

Russ Cam Points 58168

Je pense que vous pourriez avoir à

1.Modifier la source de $.post toujours utiliser JSON type de données qu'il est vraiment juste un raccourci pour une pré-configurée $.ajax appel

Ou

2.Définir votre propre fonction d'utilité qui est un raccourci pour l' $.ajax configuration que vous souhaitez utiliser

Ou

3.Vous pourriez remplacer le $.post function avec votre propre mise en œuvre par monkey patching.

Le type de données JSON dans votre exemple fait référence au type de données retourné à partir du serveur et non pas le format envoyé au serveur.

48voto

kontinuity Points 4025

J'ai fini par ajouter la méthode suivante à jQuery dans mon script:

 jQuery["postJSON"] = function( url, data, callback ) {
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        url: url,
        type: "POST",
        contentType:"application/json; charset=utf-8",
        dataType: "json",
        data: data,
        success: callback
    });
};
 

Et pour l'utiliser

 $.postJSON('http://url', {data: 'goes', here: 'yey'}, function (data, status, xhr) {
    alert('Nailed it!')
});
 

Cela a été fait en copiant simplement le code de "get" et "post" à partir des sources JQuery d'origine et en codant en dur quelques paramètres pour forcer un POSTE JSON.

Merci!

27voto

Oleg Points 136406

utiliser seulement

jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: mydata,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});

Mise à JOUR @JK: Si vous écrivez dans votre question seulement un exemple de code avec $.post, vous trouverez un exemple correspondant à la réponse. Je ne veux pas répéter les mêmes informations que l'on a déjà étudié jusqu'à savoir: $.poste et $.obtenez des formes courtes de $.ajax. Utilisez donc $.ajax et vous pouvez utiliser l'ensemble de ses paramètres sans avoir à modifier les paramètres globaux.

Par la façon dont je ne recommanderais pas l'écrasement de la norme $.post. C'est mon opinion personnelle, mais pour moi c'est important, non seulement que le programme fonctionne, mais aussi que tous ceux qui ont lu votre programme de le comprendre de la même façon. L'écrasement des méthodes standard sans avoir une raison très importante à suivre pour l'incompréhension à la lecture du code du programme. Donc, je répète ma recommandation une fois de plus: il suffit d'utiliser le montant initial de $.ajax formulaire de jQuery au lieu de jQuery.get et jQuery.post et vous recevez des programmes qui non seulement fonctionne parfaitement, mais peut être lu par des gens sans malentendus.

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