JQuery, envoyer un objet JSON en utilisant la méthode GET

J'essaie d'envoyer un objet json en utilisant la méthode GET. Mon code:

$.ajax({
           url: "/api/endpoint",
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

Cependant, les en-têtes reçus ont "Content-Length" mis à zéro, donc mon analyseur json sur le serveur ne lit pas le contenu.

J'ai déjà essayé de définir l'en-tête content length, mais il arrive toujours au serveur comme zéro:

$.ajax({
           url: "/api/endpoint",
           headers: {"CONTENT_LENGTH",JSON.stringify({"sort":"date"}).length},
           type: "GET",
           data: {"sort":"date"},
           contentType: "application/json",
           dataType: "json",
           ...

Une idée de comment faire fonctionner cela? Il doit être obtenir la demande.

25
demandé sur Roman Semko 2012-06-08 15:46:24

4 réponses

Les requêtes GET ( au moins généralement ) n'ont pas de corps de message. Comme mentionné dans les documents , jQuery ajoute {[0] } des requêtes GET aux paramètres d'url. Vous devriez pouvoir lire votre paramètre sort à partir de là avec votre application serveur.

BTW, aucun agent utilisateur vous permettra de définir le Content-Length - tête - il (et doit) être fait automatiquement en fonction des données envoyées.

30
répondu Bergi 2017-05-23 12:17:25

Il y a quelques endroits où vous avez un peu mal tourné.

  • ce n'est pas CONTENT_LENGTH, c'est Content-Length.
  • Ne définissez pas l'en-tête Content-Length, le navigateur le fera pour vous.
  • la requête Get A content-length = 0.

Quelque chose comme le ci-dessous devrait fonctionner pour vous:

$.ajax({
     url: "/api/endpoint?parameters="+encodeURIComponent(JSON.stringify({"sort":"date"})),
     type: "GET",
     ...
});
20
répondu UltraInstinct 2012-06-13 14:12:13

Je pense que vous devriez utiliser JSON.stringify pour obtenir des paramètres dans L'URL comme ceci:

$.ajax({
           url: "/api/endpoint?parameters="+JSON.stringify({"sort":"date"}),
           type: "GET",
           contentType: "application/json",
           dataType: "json",
           ...
5
répondu bahaddin.yasar 2012-06-08 12:04:38

Comme mentionné par Bergi, les données sont converties par jQuery.ajax() en paramètres de requête. De jQuery 1.7.2:

// Determine if request has content
s.hasContent = !rnoContent.test( s.type );    --> false when s.type == "GET'

...

if ( !s.hasContent ) {
    // If data is available, append data to url
    if ( s.data ) {
        s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
        // #9682: remove data so that it's not used in an eventual retry
        delete s.data;
    }
3
répondu mhu 2013-05-04 11:06:15