Jquery - ¿Cómo hacer que $.post() use contentType=application/json?

Resuelto JK. asked hace 14 años • 17 respuestas

Me di cuenta de que cuando uso $.post() en jquery, el tipo de contenido predeterminado es application/x-www-form-urlencoded, cuando mi código asp.net mvc necesita tener contentType=application/json

(Consulte esta pregunta para saber por qué debo usar application/json: ASPNET MVC - ¿Por qué ModelState.IsValid es falso "El campo x es obligatorio" cuando ese campo tiene un valor? )

¿Cómo puedo hacer que $.post() envíe contentType=application/json? Ya tengo una gran cantidad de funciones $.post(), así que no quiero cambiar a $.ajax() porque tomaría demasiado tiempo.

si lo intento

$.post(url, data, function(), "json") 

Todavía tiene contentType=application/x-www-form-urlencoded. Entonces, ¿qué hace exactamente el parámetro "json" si no cambia el tipo de contenido a json?

si lo intento

$.ajaxSetup({
  contentType: "application/json; charset=utf-8"
});

Eso funciona, pero afecta a todos los $.get y $.post que tengo y provoca que algunos se rompan.

Entonces, ¿hay alguna manera de cambiar el comportamiento de $.post() para enviar contentType=application/json?

JK. avatar May 17 '10 04:05 JK.
Aceptado
$.ajax({
  url:url,
  type:"POST",
  data:data,
  contentType:"application/json; charset=utf-8",
  dataType:"json",
  success: function(){
    ...
  }
})

Ver: jQuery.ajax()

Adrien avatar May 16 '2010 21:05 Adrien

Finalmente encontré la solución, que funciona para mí:

jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: JSON.stringify({data:"test"}),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});
vvkatwss vvkatwss avatar Jan 26 '2012 14:01 vvkatwss vvkatwss

Creo que quizás tengas que hacerlo

$.ajax1.Modifique la fuente para que $.post siempre use el tipo de datos JSON, ya que en realidad es solo un acceso directo para una llamada preconfigurada.

O

2. Defina su propia función de utilidad que sea un acceso directo para la $.ajaxconfiguración que desea utilizar.

O

3.Puedes sobrescribirlo $.post functioncon tu propia implementación mediante parches de mono.

El tipo de datos JSON en su ejemplo se refiere al tipo de datos devuelto por el servidor y no al formato enviado al servidor.

Russ Cam avatar May 16 '2010 21:05 Russ Cam

Terminé agregando el siguiente método a jQuery en mi script:

jQuery["postJSON"] = function( url, data, callback ) {
    // shift arguments if data argument was omitted
    if ( jQuery.isFunction( data ) ) {
        callback = data;
        data = undefined;
    }

    return jQuery.ajax({
        url: url,
        type: "POST",
        contentType:"application/json; charset=utf-8",
        dataType: "json",
        data: data,
        success: callback
    });
};

y para usarlo

$.postJSON('http://url', {data: 'goes', here: 'yey'}, function (data, status, xhr) {
    alert('Nailed it!')
});

Esto se hizo simplemente copiando el código de "get" y "post" de las fuentes originales de JQuery y codificando algunos parámetros para forzar una POST JSON.

¡Gracias!

Arif Amirani avatar Jun 26 '2013 08:06 Arif Amirani

usar solo

jQuery.ajax ({
    url: myurl,
    type: "POST",
    data: mydata,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function(){
        //
    }
});

ACTUALIZADO @JK: si escribe en su pregunta solo un ejemplo de código con $.post, encontrará un ejemplo correspondiente en la respuesta. No quiero repetir la misma información que ya estudiaste hasta que sepas: $.post y $.get son formas cortas de $.ajax. Así que simplemente use $.ajax y podrá usar el conjunto completo de sus parámetros sin tener que cambiar ninguna configuración global.

Por cierto, no recomendaría sobrescribir el $.post estándar. Es mi opinión personal , pero para mí es importante, no sólo que el programa funcione, sino también que todos los que lean tu programa lo entiendan de la misma manera. Sobrescribir métodos estándar sin una razón muy importante puede provocar malentendidos al leer el código del programa. Así que repito mi recomendación una vez más: simplemente use el formato jQuery $.ajax original en lugar de jQuery.gety jQuery.postobtendrá programas que no sólo funcionan perfectamente, sino que también pueden ser leídos por personas sin malentendidos.

Oleg avatar May 16 '2010 21:05 Oleg