¿Por qué el siguiente código envió datos como City=Moscow&Age=25 en lugar de formato JSON?

var arr = {City:'Moscow', Age:25};
$.ajax(
   {
        url: "Ajax.ashx",
        type: "POST",
        data: arr,
        dataType: 'json',
        async: false,
        success: function(msg) {
            alert(msg);
        }
    }
);
74
Neir0 5 jul. 2011 a las 22:32

4 respuestas

Escribí una breve función de conveniencia para publicar JSON.

$.postJSON = function(url, data, success, args) {
  args = $.extend({
    url: url,
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    async: true,
    success: success
  }, args);
  return $.ajax(args);
};

$.postJSON('test/url', data, function(result) {
  console.log('result', result);
});
4
Aram Kocharyan 22 oct. 2013 a las 11:44

Se serializa para que el URI pueda leer los pares de nombre y valor en la solicitud POST de forma predeterminada. Puede intentar establecer processData: false en su lista de parámetros. No estoy seguro si eso ayudaría.

0
picus 5 jul. 2011 a las 18:36

Porque por defecto jQuery serializa los objetos pasados como el parámetro data a $.ajax. Utiliza $.param para convertir los datos en una cadena de consulta.

De los documentos de jQuery para $.ajax:

[el argumento data] se convierte en una cadena de consulta, si aún no es una cadena

Si desea enviar JSON, deberá codificarlo usted mismo:

data: JSON.stringify(arr);

Tenga en cuenta que JSON.stringify solo está presente en los navegadores modernos. Para obtener soporte heredado, consulte json2.js

9
lonesomeday 5 jul. 2011 a las 18:35

Debe establecer el tipo de contenido correcto y stringificar su objeto.

var arr = {City:'Moscow', Age:25};
$.ajax({
    url: "Ajax.ashx",
    type: "POST",
    data: JSON.stringify(arr),
    dataType: 'json',
    async: false,
    contentType: 'application/json; charset=utf-8',
    success: function(msg) {
        alert(msg);
    }
});
1
Ganesh Yadav 30 jul. 2018 a las 08:44