2010-12-03 11 views
17

Bueno, aquí es la historia:¿Cómo puedo enviar datos JSON al servidor

tengo algunos datos que enviar al servidor, sino que debe convertirse en JSON tipo de datos en primer lugar.

hice tal llamada AJAX:

$.ajax({ 
     url: url, // the url I want to post to. 
     type: 'POST', 
     contenttype:'application/json; charset=utf-8', 
     beforeSend: //some HTTP basic auth stuff 
     data: { 
      name:'test', 
      key:'foo', 
      key2:'bar' 
     }, 
     dataType:'JSON' 
}); 

básicamente estoy esperando los datos que envío al servidor fue:

[name:test,key:foo,key2:bar] 

pero lo que tengo era:

name=test&key=foo&key2=bar 

¿Qué me faltaba? ¿Cómo puedo obtener esos datos en JSON?

+0

posible duplicado de [Enviar JSON al servidor usando jQuery] (http://stackoverflow.com/questions/4118226/send-json-to-the-server-using-jquery) –

Respuesta

-3
dataType: 'json', 
+0

Para ser más clara , esta respuesta significa que ha puesto en mayúscula incorrectamente su valor de 'dataType'. Las comparaciones de cadenas distinguen entre mayúsculas y minúsculas, y jQuery solo prueba para '" json "', no '" JSON "'. – Phrogz

+2

'dataType' se usa para los datos que devuelve la respuesta y no para la publicación. – Jonas

3

Tuve el mismo problema. No puede enviar un objeto como "datos", necesita codificar el objeto. Prueba este lugar, con el objeto Stringified:

$.ajax({ 
     url: url, 
     type: 'POST', 
     contentType:'application/json', 
     data: '{ 
      name:"test", 
      key:"foo", 
      key2:"bar" 
     }', 
     dataType:'json' 
}); 
+0

También he visto esto, pero he visto ejemplos que lo muestran así: data: {name: 'test', key: 'foo', key2: 'bar'}. Falla cada vez que intento codificarlo así – Yatrix

21
var data = {'bob':'foo','paul':'dog'}; 
$.ajax({ 
    url: url, 
    type: 'POST', 
    contentType:'application/json', 
    data: JSON.stringify(data), 
    dataType:'json' 
}); 

/** ** Añadido/

Lo anterior no hacer nada con la respuesta del servidor si tiene que hacer algo, entonces una se llamará a la devolución de llamada cuando el servidor haya respondido.

var data = {'bob':'foo','paul':'dog'}; 
$.ajax({ 
    url: url, 
    type: 'POST', 
    contentType:'application/json', 
    data: JSON.stringify(data), 
    dataType:'json', 
    success: function(data){ 
    //On ajax success do this 
    alert(data); 
     }, 
    error: function(xhr, ajaxOptions, thrownError) { 
     //On error do this 
     if (xhr.status == 200) { 

      alert(ajaxOptions); 
     } 
     else { 
      alert(xhr.status); 
      alert(thrownError); 
     } 
    } 
}); 
+0

¿Esto publica una respuesta? O quizás una pregunta mejor, ¿hay alguna manera de publicar sin tratar con una respuesta? similar a una secuencia con solo un paquete – shanehoban

+1

Esto no maneja ninguna respuesta devuelta por el servidor. – ShiftyThomas

+0

Gracias, y would $ .post ser mejor entonces, si todo lo que quiero hacer es enviar una solicitud con algunos datos; y no le importa el regreso? – shanehoban

0

Además, es NECESARIO puede crear un parámetro y asignar el valor con JSON.stringify

.... 
data: "jsonString="+JSON.stringify(data), 
... 
2

Prueba esto: http://www.abeautifulsite.net/blog/2008/05/postjson-for-jquery/

Es mucho más corto:

$.post(url, data, function(response) { 
    // Do something with the response 
}, 'json'); 
+0

Me encanta de esta manera. $ .ajax es más por bajo nivel. – CStff

+0

El enlace está muerto, pero la versión actual de jQuery proporciona un equivalente en cualquier caso, con algunos errores al manejar la amabilidad: vea [la documentación de la API] (http://api.jquery.com/jQuery.post/) –

0

Acepto que los datos deben convertirse en una cadena JSON, no solo para estar de acuerdo con el dataType y contentType configuración, pero lo más importante, para satisfacer al servidor.

data: JSON.stringify(data), 
dataType:'json' 
Cuestiones relacionadas