61 votes

jQuery - Comment METTRE JSON via Ajax?

Je suis en train de mettre certains au format JSON données via Ajax avec jQuery sur un serveur. Mon code ressemble à ceci:

$.ajax({
    type: "PUT",
    url: myURL,
    contentType: "application/json",
    data: {"data": "mydata"}
});

Mais sur le côté serveur, je reçois un data=mydata chaîne de caractères, à la place de l'JSON. Firebug me dit la même chose.

Où est l'erreur?

53voto

Andy Points 4242

Je pense que les données doit être une Chaîne de caractères. Les objets sont convertis à querystrings qui est ce que vous voyez ici.

Vous pouvez utiliser le JSON.stringify(obj) méthode pour convertir votre Objet à une Chaîne. Le code de l'objet JSON est disponible à partir de: https://github.com/douglascrockford/JSON-js/blob/master/json2.js.

Alternativement, il suffit de passer le code que vous utilisez pour créer l'objet comme une Chaîne littérale, mais j'imagine que c'est juste un exemple et vous aurez envie de coder un objet que vous avez déjà créées.

31voto

Dmytro Points 201

Si vous avez toujours envoyer JSON dans votre application, vous pouvez exécuter ce quelque part dans votre init, puis utiliser la valeur par défaut $.ajax appel comme dans votre exemple, et il sera toujours sérialiser comme une chaîne JSON au lieu de l'Ajax par défaut de la chaîne de requête.

J'utilise ici l'objet JSON mentionnés ci-dessus:

$.ajaxSetup({
    contentType : 'application/json',
    processData : false
});
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    if (options.data){
        options.data=JSON.stringify(options.data);
    }
});

1voto

Neha Points 11
//url: this is a reference to the XML, where you need to define the mapping.
//<entry key="/getEmpDetails/transEfileGenerate.app">
//<bean class="com.adp.ems.framework.spring.MappingItem" p:delegate-ref="efilePageDelegate"
//p:action="passJSONObjectAndGetWebServiceOutput" />

//str1 is the input JSON that you need to pass... Ajax will automatically take care to get the response.
//</entry>

var kw = {
    url : "getEmpDetails/transEfileGenerate.app",
    timeout : 30000,
    handleAs : "json",
    sync: false,
    putData : str1,
    headers: { "Content-Type": "application/json"},
    load : function(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