jQuery envoie une chaîne en tant que paramètres POST

98

Je veux envoyer une chaîne en tant que paramètre ajax Post.

Le code suivant:

$.ajax({
   type: "POST",
   url: "http://nakolesah.ru/",
   data: 'foo=bar&ca$libri=no$libri',
   success: function(msg){
     alert('wow'+msg);
   }
});

Ne fonctionne pas. Pourquoi?

Mirgorod
la source
2
Je vois que vous êtes un développeur PHP et je vois aussi que vous avez fait ceci: ca$libri=no$libri. Juste en vérifiant pour être sûr ici ... êtes-vous sûr que vous n'essayez pas accidentellement d'utiliser des constructions PHP là où devraient être celles de JS? Si vous souhaitez inclure la valeur de la $librivariable dans cette chaîne, essayez ceci: 'foo=bar&ca' + $libri + '=no' + $libri.
treeface
nono :) je comprends tous les moments de génération de js par php :) ce sont les noms des variables ajax dans APS. Je crée un analyseur qui analyse certains sites avec ajax. Et maintenant, j'ai pourquoi l'erreur. C'est une requête interdomaine coz. Je dois d'abord créer une requête sur mon serveur :)
Mirgorod

Réponses:

182

Essayez comme ceci:

$.ajax({
    type: 'POST',
    // make sure you respect the same origin policy with this url:
    // http://en.wikipedia.org/wiki/Same_origin_policy
    url: 'http://nakolesah.ru/',
    data: { 
        'foo': 'bar', 
        'ca$libri': 'no$libri' // <-- the $ sign in the parameter name seems unusual, I would avoid it
    },
    success: function(msg){
        alert('wow' + msg);
    }
});
Darin Dimitrov
la source
1
ne devrait-il pas être data: {foo: 'bar'}, sans l'apostrophe '?
Marius Stănescu
6
@MariusStanescu, les deux sont une syntaxe javascript équivalente.
Darin Dimitrov
3
aussi à peu près sûr que le $ dans le ca $ libri est parfaitement bien
Michael Crook
Ne répond pas à la question concernant la publication sous forme de chaîne: (, voir la réponse ci-dessous.
Andrew
Cela fonctionne mais ce n'est pas le cas: foo: 'bar'. J'ai passé 2 jours sans cause, je n'ai pas ajouté les signes de cordes des deux côtés !!!
Eugen Sunic
39
$.ajax({
    type: 'POST',    
    url:'http://nakolesah.ru/',
    data:'foo='+ bar+'&calibri='+ nolibri,
    success: function(msg){
        alert('wow' + msg);
    }
});
Chakavak Behzad
la source
15
c'est pourquoi je suis venu ici, pour savoir comment envoyer des données $ .post sous forme de chaîne. la réponse acceptée ne m'aide pas du tout avec cela. Merci.
chiliNUT
D'accord, j'ai également eu une situation où une chaîne était nécessaire pour un framework que je développais, bonne réponse. Dans ma situation, j'ai pu faire ce travail en mettant la chaîne dans une variable à côté de data :, le format de ma chaîne était '? Var = value & var2 = value2'
Joseph Astrahan
13

Je vois qu'ils n'ont pas compris votre question. La réponse est: ajoutez le paramètre "traditionnel" à votre appel ajax comme ceci:

$.ajax({
  traditional: true,
  type: "POST",
  url: url,
  data: custom ,
  success: ok,
 dataType: "json"
});

Et cela fonctionnera avec les paramètres PASSED AS A STRING.

Vitaly Goji
la source
Merci! Cela me sauve la journée!
Dat TT
11

Pour une application similaire, j'ai dû envelopper mon dataobjet JSON.stringify()comme ceci:

data: JSON.stringify({ 
  'foo': 'bar', 
  'ca$libri': 'no$libri'
}),

L'API fonctionnait avec un client REST mais ne pouvait pas le faire fonctionner avec jquery ajax dans le navigateur. stringify était la solution.

Dylan Valade
la source
Pourquoi avons-nous dû faire cela?
Renoir Reis
Pas sûr, mais certains caractères de la réponse ne doivent pas être considérés comme des chaînes à moins d'être forcés.
Dylan Valade
4

Je ne sais pas si c'est toujours d'actualité ... juste pour les futurs lecteurs. Si vous voulez vraiment transmettre vos paramètres dans le cadre de l'URL, vous devriez probablement utiliser jQuery.param () .

egnarts-ms
la source
1

Pas une réponse directe à votre question. Mais voici la seule syntaxe qui fonctionnait pour moi -

data: '{"winNumber": "' + win + '"}',

Et le nom du paramètre correspond à l'argument de la méthode serveur

LCJ
la source
1

J'ai également rencontré ce problème exact. Mais j'ai une solution et cela a parfaitement fonctionné. J'ai eu besoin de passer les paramètres qui sont déjà produits par la fonction javascript. Donc, le code ci-dessous fonctionne pour moi. J'ai utilisé ColdFusion pour le backend. J'ai juste utilisé directement les paramètres comme variable.

                    $.ajax({
                    url: "https://myexampleurl.com/myactionfile.cfm",
                    type: "POST",
                    data : {paramert1: variable1,parameter2: variable2},
                    success: function(data){
                        console.log(data);                              
                    } )};
CodeLover
la source
0

J'étais confronté au problème de passer une valeur de chaîne à des paramètres de chaîne dans Ajax. Après tant de recherches sur Google, j'ai proposé une solution personnalisée comme ci-dessous.

var bar = 'xyz';
var calibri = 'no$libri';

$.ajax({
   type: "POST",
   dataType: "json",
   contentType: "application/json; charset=utf-8",
   url: "http://nakolesah.ru/",
   data: '{ foo: \'' + bar + '\', zoo: \'' + calibri + '\'}',
   success: function(msg){
       alert('wow'+msg);
   },
});

Ici, bar et calibri sont deux variables de chaîne et vous pouvez transmettre n'importe quelle valeur de chaîne aux paramètres de chaîne respectifs dans la méthode Web.

Sohel Pathan
la source