jQuery enviar string como parâmetros POST

97

Eu quero enviar uma string como um parâmetro Post ajax.

O seguinte código:

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

Não está funcionando. Por quê?

Mirgorod
fonte
2
Vejo que você é um desenvolvedor PHP e eu também ver que você fez isso: ca$libri=no$libri. Apenas checando para ter certeza aqui ... tem certeza de que não está acidentalmente tentando usar construções PHP onde as de JS deveriam estar? Se você quiser incluir o valor da $librivariável para essa corda, tente o seguinte: 'foo=bar&ca' + $libri + '=no' + $libri.
treeface
nono :) eu entendo todos os momentos de geração de js por php :) são os nomes das variáveis ​​ajax em APS. Eu crio um analisador que analisa algum site com ajax. E agora entendi porque erro. É coz crossdomain query. Devo primeiro criar uma consulta no meu servidor :)
Mirgorod

Respostas:

181

Tente assim:

$.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
fonte
1
não deveria ser data: {foo: 'bar'}, sem o apóstrofo '?
Marius Stănescu
6
@MariusStanescu, ambos são sintaxe javascript equivalente equivalente.
Darin Dimitrov,
3
também tenho certeza que o $ no ca $ libri está perfeitamente bem
Michael Crook
Não responde à pergunta sobre postagem como string :(, veja a resposta abaixo.
Andrew
Isso funciona, mas isso não funciona: foo: 'bar'. Passei 2 dias sem causa e não coloquei os sinais das cordas em ambos os lados !!!
Eugen Sunic
39
$.ajax({
    type: 'POST',    
    url:'http://nakolesah.ru/',
    data:'foo='+ bar+'&calibri='+ nolibri,
    success: function(msg){
        alert('wow' + msg);
    }
});
Chakavak Behzad
fonte
15
é por isso que vim aqui, para descobrir como enviar dados $ .post como uma string. a resposta aceita não me ajuda em nada. obrigado.
chiliNUT
Concordo, eu também tive uma situação em que uma string foi necessária para um framework que eu estava desenvolvendo, boa resposta. Na minha situação, consegui fazer isso funcionar colocando a string em uma variável ao lado dos dados :, o formato da minha string era '? Var = value & var2 = value2'
Joseph Astrahan
13

Vejo que eles não entenderam sua pergunta. A resposta é: adicione o parâmetro "tradicional" à sua chamada ajax assim:

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

E funcionará com os parâmetros PASSADOS COMO STRING.

vitaly goji
fonte
Obrigado! Isso salva meu dia!
Dat TT de
11

Para um aplicativo semelhante, tive que envolver meu dataobjeto JSON.stringify()assim:

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

A API estava funcionando com um cliente REST, mas não conseguiu fazer com que funcionasse com jquery ajax no navegador. stringify foi a solução.

Dylan Valade
fonte
Por que tivemos que fazer isso?
Renoir Reis
Não tenho certeza, mas alguns caracteres na resposta não devem ser considerados strings, a menos que sejam forçados.
Dylan Valade
4

Não tenho certeza se isso ainda é real .. apenas para leitores futuros. Se o que você realmente deseja é passar seus parâmetros como parte da URL, você provavelmente deve usar jQuery.param () .

egnarts-ms
fonte
1

Não é uma resposta direta à sua pergunta. Mas seguir é a única sintaxe que costumava funcionar para mim -

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

E o nome do parâmetro corresponde ao argumento do método do servidor

LCJ
fonte
1

Eu também enfrentei esse mesmo problema. Mas eu tenho uma solução e funcionou perfeitamente. Precisei passar os parâmetros que já são produzidos pela função javascript. Portanto, o código abaixo está funcionando para mim. Usei ColdFusion para o back-end. Eu apenas usei diretamente os parâmetros como uma variável.

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

Eu estava enfrentando o problema de passar o valor da string para parâmetros de string no Ajax. Depois de tanto pesquisar no Google, eu vim com uma solução personalizada como abaixo.

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

Aqui, bar e calibri são duas variáveis ​​de string e você pode passar qualquer valor de string para os respectivos parâmetros de string no método da web.

Sohel Pathan
fonte