web-dev-qa-db-fra.com

Comment puis-je envoyer des données JSON au serveur

Eh bien, voici l'histoire:

J'ai quelques données à envoyer au serveur, mais elles doivent d'abord être converties en JSON dataType.

J'ai fait un tel appel ajax:

    $.ajax({
       url: url, // the url I want to post to.
       type: 'POST',
       contenttype:'application/json; charset=utf-8',
       beforeSend: //some HTTP basic auth stuff
       data: {
          name:'test',
          key:'foo',
          key2:'bar'
       },
       dataType:'JSON'
});

en gros, je m'attends à ce que les données que j'envoie au serveur soient:

[name:test,key:foo,key2:bar]

mais ce que j'ai été:

name=test&key=foo&key2=bar

Qu'est-ce que j'ai manqué? Comment puis-je obtenir ces données dans JSON?

18
Daniel Chen
 var data = {'bob':'foo','paul':'dog'};
 $.ajax({
   url: url,
   type: 'POST',
   contentType:'application/json',
   data: JSON.stringify(data),
   dataType:'json'
 });

/** Ajoutée **/

Ce qui précède ne fait rien avec la réponse du serveur si vous devez faire quelque chose, un rappel sera appelé lorsque le serveur aura répondu.

 var data = {'bob':'foo','paul':'dog'};
 $.ajax({
   url: url,
   type: 'POST',
   contentType:'application/json',
   data: JSON.stringify(data),
   dataType:'json',
   success: function(data){
     //On ajax success do this
     alert(data);
      },
   error: function(xhr, ajaxOptions, thrownError) {
      //On error do this
        if (xhr.status == 200) {

            alert(ajaxOptions);
        }
        else {
            alert(xhr.status);
            alert(thrownError);
        }
    }
 });
22
ShiftyThomas

J'ai eu le même problème. Vous ne pouvez pas envoyer un objet en tant que "données", vous devez le stringifier. Essayez plutôt ceci, avec votre objet stringifié:

$.ajax({
       url: url,
       type: 'POST',
       contentType:'application/json',
       data: '{
          name:"test",
          key:"foo",
          key2:"bar"
       }',
       dataType:'json'
});
3
Jonas

Essayez ceci: http://www.abeautifulsite.net/blog/2008/05/postjson-for-jquery/

C'est beaucoup plus court:

$.post(url, data, function(response) {
    // Do something with the response
}, 'json');
2
Jānis Gruzis

De plus, necesary peut créer un paramètre et attribuer la valeur avec JSON.stringify

....
data: "jsonString="+JSON.stringify(data),
...
0
cmg_george

Je conviens que les données doivent être converties en une chaîne JSON, non seulement pour accepter les configurations dataType et contentType, mais surtout pour satisfaire le serveur. 

data: JSON.stringify(data),
dataType:'json'
0
Keaton Robinson