2011-06-06 35 views
13

He buscado en Google por un tiempo y solo puedo encontrar lo que processData: false hace. No puedo encontrar a nadie que haya experimentado este mismo problema.jQuery Ajax - Estableciendo processData en falsos cortes mi solicitud AJAX

Estoy pasando de nuevo JSON al servidor y no quiero que jquery convierta automáticamente los datos a una cadena de consulta, por lo que estoy configurando processData en falso. Puedo ver la solicitud activada si elimino processData, pero tan pronto como lo instalo no veo ninguna solicitud (usando Firebug & herramientas de desarrollo de Chrome).

$.ajax({ 
      url: myUrl, 
      type: "POST", 
      data: {foo: "bar"}, 
      processData: false, 
      contentType: 'application/json' 
     }); 

La solicitud estaba haciendo un principio estaba un poco más complejo que esto, pero he simplificado para tratar de reducir el problema, pero este simple trozo de código no funciona bien (de nuevo, funciona si Comente processData). Además, no veo ningún error de Javascript en la consola.

¡Cualquier ayuda sería muy apreciada!

EDIT Para futuros Googlers: como solía señalar, jQuery no arrojará ningún error si proporciona un objeto JS o una cadena JSON mal formateada. Simplemente no lanzará la solicitud.

Respuesta

13

Quiere pasar los datos como JSON. Estás pasando un objeto Javascript. JSON es una forma de serializar objetos de Javascript en cadenas para que puedan transmitirse sin problemas de compatibilidad.

que realmente quiere pasar el JSON en una cadena:

$.ajax({ 
    url: myUrl, 
    type: "POST", 
    data: '{"foo": "bar"}', 
    processData: false, 
    contentType: 'application/json' 
}); 
+0

Muchas gracias! Me di cuenta de que los datos más complejos que enviaba originalmente también tenían un formato incorrecto. Es interesante que jQuery no arroje ningún error al intentar analizar la cadena JSON incorrecta. – paz

+3

Ha pasado algún tiempo desde esta publicación, pero me gustaría agregar a @lonesomday si desea evitar poner '' a mano en cada propiedad/valor que puede hacer JSON.stringify () y eso es todo. – vsm

+6

Pero aún así, ¿qué hace processData? – getsetbro

5

En realidad, processData por defecto asume que data pasado es un objeto y lo envía como application/x-www-form-urlencoded.

Resumiendo todo lo dicho anteriormente por @lonesomeday y @vsm para enviar JSON prima (lo que es diferente de los datos del formulario) es necesario:

$.ajax({ 
    url: 'http://here-i.am/send-me/an/angel', // Determining far end 
    data: JSON.stringify({foo: "bar"}), // Obtaining proper JSON string from data object 
    processData: false, // Preventing default data parse behavior 
    contentType: "application/json" // Setting proper `ContentType` for our data 
    ... 
});