web-dev-qa-db-fra.com

jQuery - Comment PUT JSON via Ajax?

J'essaie de mettre des données au format JSON via Ajax avec jQuery sur un serveur. Mon code ressemble à ceci:

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

Mais côté serveur, je reçois un data=mydata chaîne, au lieu du JSON attendu. Firebug me dit la même chose.

Où est l'erreur?

61
Juri Glass

Je pense que les données doivent être une chaîne. Les objets sont convertis en chaînes de requête, ce que vous voyez ici.

Vous pouvez utiliser la méthode JSON.stringify(obj) pour convertir votre objet en chaîne. Le code de l'objet JSON est disponible sur: https://github.com/douglascrockford/JSON-js/blob/master/json2.js .

Alternativement, passez simplement le code que vous utilisez pour créer l'objet en tant que chaîne littérale, mais j'imagine que ce n'est qu'un exemple et vous voudrez encoder un objet que vous avez déjà créé.

53
Andy

Si vous devez toujours envoyer du JSON dans votre application, vous pouvez simplement l'exécuter quelque part dans votre init, puis utiliser la valeur par défaut $.ajax appelez comme dans votre exemple, et il sera toujours sérialisé en tant que chaîne JSON au lieu de la chaîne de requête par défaut Ajax.

Ici, j'utilise l'objet JSON mentionné ci-dessus:

$.ajaxSetup({
    contentType : 'application/json',
    processData : false
});
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    if (options.data){
        options.data=JSON.stringify(options.data);
    }
});
31
Dmytro
//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) {
},
1
Neha