web-dev-qa-db-fra.com

Comment envoyer des données dans le corps d'une requête avec un GET lors de l'utilisation de jQuery $ .ajax ()

L'API de service que je consomme a une méthode GET donnée qui nécessite que les données soient envoyées dans le corps de la demande.

Les données requises dans le corps sont une liste d'identifiants séparés par hypen et pourraient potentiellement être très volumineuses. Elles doivent donc être envoyées dans le corps, sans quoi elles risquent de se retrouver quelque part dans la chaîne des navigateurs/proxies/serveurs Web, etc. Remarque Je n'ai pas le contrôle sur le service ou l'API, veuillez donc ne pas suggérer de le modifier.

J'utilise le code jQuery suivant, mais en observant la requête/réponse dans fiddler, je peux voir que les "données" que j'envoie sont TOUJOURS converties et ajoutées à la chaîne de requête malgré le fait que l'option "processData" soit définie sur false ...

$.ajax({
   url: "htttp://api.com/entity/list($body)",
   type: "GET",
   data: "id1-id2-id3",
   contentType: "text/plain",
   dataType: "json",
   processData: false, // avoid the data being parsed to query string params
   success: onSuccess,
   error: onError
});

Quelqu'un sait comment je peux forcer l'envoi de la valeur "data" dans le corps de la requête? Toute aide est appréciée, merci d'avance.

51
Oliver Pearmain

En général, ce n'est pas ainsi que les systèmes utilisent les requêtes GET. Il sera donc difficile de faire jouer vos bibliothèques. En fait, spec indique que "Si la méthode de la requête est une correspondance sensible à la casse pour GET ou HEAD, agissez comme si les données étaient nulles". Alors, je pense vous avez de la chance à moins que le navigateur que vous utilisez ne respecte pas cette partie de la spécification.

Vous pouvez probablement configurer un noeud final sur votre propre serveur pour une demande ajax POST), puis le rediriger dans le code de votre serveur vers une demande GET avec un corps.

Si vous n'êtes pas absolument lié aux demandes GET avec le corps comme données, vous avez deux options.

POST avec données: C'est probablement ce que vous voulez. Si vous transmettez des données, cela signifie probablement que vous modifiez un modèle ou effectuez une action sur le serveur. Ces types d'actions sont généralement effectués avec des requêtes POST).

GET avec les données de la chaîne de requête: Vous pouvez convertir vos données en paramètres de chaîne de requête et les transmettre ainsi au serveur.

url: 'somesite.com/models/thing?ids=1,2,3'
48
EndangeredMassa