jQuery envía cadena como parámetros POST

97

Quiero enviar una cadena como parámetro de publicación ajax.

El siguiente código:

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

No está trabajando. ¿Por qué?

Mirgorod
fuente
2
Veo que usted es un desarrollador de PHP y también veo que usted hizo esto: ca$libri=no$libri. Solo verificando para estar seguro aquí ... ¿está seguro de que no está tratando accidentalmente de usar construcciones PHP donde deberían estar las de JS? Si desea incluir el valor de la $librivariable de en esta cadena, intente lo siguiente: 'foo=bar&ca' + $libri + '=no' + $libri.
treeface
nono :) Entiendo todos los momentos de generar js por php :) son los nombres de las variables ajax en APS. Creo un analizador que analiza algún sitio con ajax. Y ahora entiendo por qué error. Es una consulta de dominio cruzado porque. Debo crear una consulta primero en mi servidor :)
Mirgorod

Respuestas:

181

Intente así:

$.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
fuente
1
¿No deberían ser datos: {foo: 'bar'}, sin el apóstrofe '?
Marius Stănescu
6
@MariusStanescu, ambos tienen una sintaxis equivalente de javascript.
Darin Dimitrov
3
también estoy bastante seguro de que el $ en el ca $ libri está perfectamente bien
Michael Crook
No responde la pregunta sobre la publicación como cadena :(, vea la respuesta a continuación.
Andrew
Esto funciona pero esto no: foo: 'bar'. ¡He pasado 2 días sin causa! ¡No agregué los signos de cuerdas a ambos lados!
Eugen Sunic
39
$.ajax({
    type: 'POST',    
    url:'http://nakolesah.ru/',
    data:'foo='+ bar+'&calibri='+ nolibri,
    success: function(msg){
        alert('wow' + msg);
    }
});
Chakavak Behzad
fuente
15
por eso vine aquí, para averiguar cómo enviar datos de $ .post como una cadena. la respuesta aceptada no me ayuda en absoluto con eso. gracias.
chiliNUT
De acuerdo, también tuve una situación en la que se requería una cadena para un marco que estaba desarrollando, buena respuesta. En mi situación, pude hacer que esto funcionara colocando la cadena en una variable junto a los datos: el formato de mi cadena era '? Var = value & var2 = value2'
Joseph Astrahan
13

Veo que no entendieron tu pregunta. La respuesta es: agregue el parámetro "tradicional" a su llamada ajax de esta manera:

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

Y funcionará con parámetros PASADOS COMO UNA CADENA.

goji vitaly
fuente
¡Gracias! ¡Esto me salva el día!
Dat TT
11

Para una aplicación similar, tuve que envolver mi dataobjeto con JSON.stringify()esto:

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

La API estaba trabajando con un cliente REST pero no pudo hacer que funcionara con jquery ajax en el navegador. stringify fue la solución.

Dylan Valade
fuente
¿Por qué tuvimos que hacer esto?
Renoir Reis
No estoy seguro, pero algunos caracteres de la respuesta no deben considerarse cadenas a menos que estén forzados.
Dylan Valade
4

No estoy seguro de si esto sigue siendo real ... solo para futuros lectores. Si lo que realmente desea es pasar sus parámetros como parte de la URL, probablemente debería usar jQuery.param () .

egnarts-ms
fuente
1

No es una respuesta directa a su pregunta. Pero la siguiente es la única sintaxis que solía funcionar para mí:

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

Y el nombre del parámetro coincide con el argumento del método del servidor

LCJ
fuente
1

También me he enfrentado a este problema exacto. Pero tengo una solución y funcionó perfectamente. He necesitado pasar los parámetros que ya son producidos por la función javascript. Así que el siguiente código funciona para mí. Solía ColdFusion para el backend. Solo utilicé directamente los parámetros como una variable.

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

Estaba enfrentando el problema al pasar el valor de la cadena a los parámetros de la cadena en Ajax. Después de tanto buscar en Google, se me ocurrió una solución personalizada como la siguiente.

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);
   },
});

Aquí, bar y calibri son dos variables de cadena y puede pasar cualquier valor de cadena a los parámetros de cadena respectivos en el método web.

Sohel Pathan
fuente