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.
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.
Il y a quelques endroits où vous avez un peu mal tourné.
- ce n'est pas
CONTENT_LENGTH
, c'estContent-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",
...
});
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",
...
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;
}