web-dev-qa-db-fra.com

jQuery affichant un json valide dans le corps de la demande

Donc, selon le jQuery Ajax docs , il sérialise les données sous la forme d’une chaîne de requête lors de l’envoi de demandes, mais le réglage de processData:false devrait me permettre d’envoyer du JSON réel dans le corps. Malheureusement, j'ai du mal à déterminer d'abord si cela se produit et, ensuite, à quoi ressemble l'objet qui est envoyé au serveur. Tout ce que je sais, c'est que le serveur n'analyse pas ce que j'envoie.

Lorsque vous utilisez client http pour publier un objet littéral {someKey:'someData'}, cela fonctionne. Mais lorsque jQuery est utilisé avec data: {someKey:'someData'}, il échoue. Malheureusement, lorsque j'analyse la demande dans Safari, le message indique que la charge utile du message est [object Object] ... super ... et que le message est vide dans Firefox ...

Lorsque vous enregistrez le contenu du corps du côté Java, il obtient littéralement [object Object] alors comment envoyer des données REAL JSON?

Quelqu'un at-il déjà utilisé un service Java sérialisant des données JSON dans le corps de la demande, avec la demande envoyée à partir de jQuery?

BTW voici la demande $ .ajax complète:

$.ajax({
    contentType: 'application/json',
    data: {
        "command": "on"
    },
    dataType: 'json',
    success: function(data){
        app.log("device control succeeded");
    },
    error: function(){
        app.log("Device control failed");
    },
    processData: false,
    type: 'POST',
    url: '/devices/{device_id}/control'
});
157
brad

Une demande JSON réelle ressemblerait à ceci:

data: '{"command":"on"}',

Où vous envoyez une chaîne JSON réelle. Pour une solution plus générale, utilisez JSON.stringify() pour sérialiser un objet en JSON, comme ceci:

data: JSON.stringify({ "command": "on" }),

Pour prendre en charge les navigateurs plus anciens qui ne possèdent pas l’objet JSON, utilisez json2.js qui l’ajoutera dans.


Ce qui se passe actuellement, c'est que depuis que vous avez processData: false, vous envoyez essentiellement ceci: ({"command":"on"}).toString() qui est [object Object]... ce que vous voyez dans votre demande.

261
Nick Craver