jQuery publicando JSON


192

actualización: me gustaría pasar el var value al servidor

hola, lo mismo de siempre ... :)

Tengo un formulario llamado <form id="testForm" action="javascript:test()">y un área de código llamada<code id="testArea"></code>

Estoy usando este código para stringificar y mostrar los datos en el área de código:

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

Lo que quiero es enviar estos datos a un archivo JSON. He estado trabajando en este proyecto: http://ridegrab.com/profile_old/ y si presionas el Submit Querybotón verás el encabezado de la página.

También quiero usar este fragmento de script para enviar datos:

    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!"); 
        }
    })
}

Nuevamente, todo lo que quiero es poder enviar esos datos JSON al servidor. Mi servidor está configurado para update or POSTlos datos en el lugar correcto.


no puedo hacer que funcione :) ¡¡No sé cómo juntarlos para enviar esos datos al servidor ... incluso si los reemplazo datacon data: value,... !!
Patrioticcow

En primer lugar, ¿estás seguro de que no es un problema de conexión? Si asigna una errorfunción, ¿se llama? Si es así, ¿con qué error?
Wiseguy

1
Aunque tiene más de un año, responderé la última pregunta de @ Patrioticcow sobre cómo hacer eso. ¿Ves la opción de "éxito" que enviaste al método ajax? Haga lo mismo con "error". Como en "error: MyErrorHandlingFunction" o "error: function (error) {[Error manejando el código aquí]}"
vbullinger

Respuestas:


218

'data' debería ser un objeto JavaScript en cadena:

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

Para enviar su formData, páselo a stringify:

data: JSON.stringify(formData)

Algunos servidores también requieren el application/jsontipo de contenido:

contentType: 'application/json'

También hay una respuesta más detallada a una pregunta similar aquí: Jquery Ajax Publicar json en el servicio web


@tasos Creo que esto es lo que buscas: stackoverflow.com/questions/5806971/…
Kyle Wild

Haciéndose eco de la incorrección aquí; esto funcionará bien para escenarios simples, pero el mensaje codificado en url puede ser muy problemático, especialmente para conjuntos de cosas.
FMM

@FMM y Jonas N: ¿Pueden ayudarme a descubrir cómo actualizar mi respuesta para que sea correcta? Los ejemplos en los documentos de jQuery (aquí: api.jquery.com/jQuery.post ) hacen que parezca que puedes publicar un objeto JS o una cadena, lo que me hizo creer que jQuery manejaría toda la serialización de cadenas necesaria .
Kyle Wild

Patrioticcow dijo: "¿y si quiero enviar el json desde el valor var?" A menos que el valor sea una matriz o un objeto, esto no es válido JSON.
andsens

1
Considere lo que sucede cuando los datos contienen, por ejemplo, una lista de las cosas: { foo: [1,2,3], bar: 'baz' }. Esto se codificará en forma como foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(sin escape, es foo[]=1&foo[]=2&foo[]=3&bar=baz). Probablemente no sea lo que quieres del lado del servidor.
FMM

270

Publicas JSON así

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

si pasa un objeto como settings.data, jQuery lo convertirá en parámetros de consulta y, de forma predeterminada, lo enviará con el tipo de datos application / x-www-form-urlencoded; charset = UTF-8, probablemente no es lo que quieres


@ TimLovell-Smith no hará la diferencia ya que jQuery no procesará una datacadena en ningún caso
Phil

2

En caso de que envíe esta solicitud de publicación a un dominio cruzado, debe consultar este enlace.

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

Su servidor no acepta la solicitud de publicación cruzada. Por lo tanto, la configuración del servidor debe cambiarse para permitir solicitudes entre sitios.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.