JSON postando JSON


192

atualização: eu gostaria de passar var valuepara o servidor

ola, mesma idade, mesma idade ... :)

Eu tenho um formulário chamado <form id="testForm" action="javascript:test()">e uma área de código chamada<code id="testArea"></code>

Estou usando esse código para stringify e exibir os dados na área de código:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

O que eu quero é enviar esses dados para um arquivo JSON. Eu estou trabalhando neste projeto: http://ridegrab.com/profile_old/ e, se você pressionar o Submit Querybotão, verá o cabeçalho da página preenchido.

Também quero usar este pedaço de script para enviar dados:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

Novamente, tudo o que eu quero é poder enviar esses dados JSON para o servidor. Meu servidor está configurado para update or POSTos dados no lugar certo.


Eu não posso fazer isso funcionar :) Eu não sei como reuni-los para enviar esses dados para o servidor ... mesmo se eu substituir datapor data: value,... !! ??
Patrioticcow

Em primeiro lugar, você tem certeza de que não é um problema de conexão? Se você atribuir uma errorfunção, ela será chamada? Se sim, com que erro?
7266 Wiseguy

1
Embora tenha mais de um ano, responderei à última pergunta da @ Patrioticcow sobre como fazer isso. Você vê a opção "success" que você enviou para o método ajax? Faça o mesmo com "erro". Como em "error: MyErrorHandlingFunction" ou "error: function (error) {[Error handling code here]}"
vbullinger

Respostas:


218

'data' deve ser um objeto JavaScript com string:

data: JSON.stringify({ "userName": userName, "password" : password })

Para enviar o seu formData, passe-o para stringify:

data: JSON.stringify(formData)

Alguns servidores também exigem o application/jsontipo de conteúdo:

contentType: 'application/json'

Também há uma resposta mais detalhada para uma pergunta semelhante aqui: Jquery Ajax Postando json no webservice


@tasos Acho que é isso que você procura: stackoverflow.com/questions/5806971/…
Kyle Wild

Ecoando o erro aqui; isso funcionará bem para cenários simples, mas a mensagem codificada por URL pode ser muito problemática, especialmente para matrizes de coisas.
FMM

@FMM e Jonas N - Vocês podem me ajudar a descobrir como atualizar minha resposta para correção? Os exemplos nos documentos do jQuery (aqui: api.jquery.com/jQuery.post ) fazem parecer que você pode postar um objeto JS ou uma string, o que me levou a acreditar que o jQuery lidaria com toda a serialização de strings necessária .
Kyle Wild

Patrioticcow disse: "e se eu quiser enviar o json do valor var" A menos que o valor seja uma matriz ou um objeto, isso não é JSON válido.
andsens

1
Considere o que acontece quando os dados contém, por exemplo, uma lista de coisas: { foo: [1,2,3], bar: 'baz' }. Isso será codificado como foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(sem escape, é foo[]=1&foo[]=2&foo[]=3&bar=baz). Provavelmente não é o que você deseja do lado do servidor.
FMM

270

Você publica JSON assim

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

se você passar um objeto como settings.data, o jQuery o converterá em parâmetros de consulta e, por padrão, enviará com o tipo de dados application / x-www-form-urlencoded; charset = UTF-8, provavelmente não é o que você deseja


@ TimLovell-Smith não vai fazer uma diferença como jQuery não vai processar uma datacadeia de caracteres em qualquer caso
Phil

2

Caso você esteja enviando essa solicitação de postagem para um domínio cruzado, verifique este link.

https://stackoverflow.com/a/1320708/969984

Seu servidor não está aceitando a solicitação de postagem entre sites. Portanto, a configuração do servidor precisa ser alterada para permitir solicitações entre sites.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.