2012-09-10 13 views
39

Cuando examino el siguiente código en Chrome consola que me muestra un encabezado de solicitud Accept:undefinedPass acepta parámetro de cabecera a jquery ajax

jQuery.ajax({ 
     url: _this.attr('href'), 
     accepts: "application/json; charset=utf-8", 

    }); 
}); 

¿Cómo puedo configurar aceptar tipo como JSON. No quiero a establecer una cabecera personalizada o utilizar beforeSend

Respuesta

43

probar esto,

$.ajax({  
    headers: {   
    Accept: "text/plain; charset=utf-8",   
    "Content-Type": "text/plain; charset=utf-8" 
    }  
    data: "data",  
    success : function(response) { 
    // ... 
    } 
}); 

Ver este post para referencia:

Cannot properly set the Accept HTTP header with jQuery

+0

chcek el primer parámetro http://api.jquery.com/jQuery.ajax/. Sé que puedo pasar los encabezados, pero ¿por qué no funciona con acepta – aWebDeveloper

+0

+1 Genial, solucionado mi otro problema http://stackoverflow.com/questions/18586403/sending-html-data-through-ajax-using-spring- mvc. – ATOzTOA

26

Hay dos formas alternativas para establecer aceptar cabecera , que son los siguientes:

1) setRequestHeader('Accept','application/json; charset=utf-8'); 

2) $.ajax({ 
    dataType: ($.browser.msie) ? "text" : "json", 
    accepts: { 
     text: "application/json" 
    } 
}); 
+3

El valor de 'texto' para IE me estaba matando. – Peter

4

Prueba esto:

$.ajax({ 
     beforeSend: function (xhr){ 
     xhr.setRequestHeader("Content-Type","application/json"); 
     xhr.setRequestHeader("Accept","text/json"); 
    }, 
    type: "POST", 
    //........ 
}); 
+1

Esta es la única solución que podría funcionar, y uso jQuery 2.0+ – pusle

4

Ya había identificado la acepta parámetros como la que quería y Keyur está justo en que le muestra la forma correcta de configurar, pero si se establece Tipo de datos a "json" entonces se configurará automáticamente el valor por defecto de acepta el valor que desea según the jQuery reference. Así que todo lo que necesita es:

jQuery.ajax({ 
    url: _this.attr('href'), 
    dataType: "json" 
}); 
2

utilizo jQuery.getJSON(url [, data ] [, success(data, textStatus, jqXHR) ]) por ejemplo:

var url="my.php"; 
$.getJSON(url, myObj) 
.done(function(json) { ... }) /* got JSON from server */ 
.fail(function(jqxhr, textStatus, error) { 
    var err = textStatus + ", " + error; 
    console.log("Failed to obtain JSON data from server: " + err); 
    }); /* failed to get JSON */ 

getJSON es la abreviatura de:

$.ajax({ 
    dataType: "json", 
    url: url, 
    data: data, 
    success: success 
}); 
3

Aunque algunos de ellos son correctos, he encontrado bastante confuso las respuestas anteriores. Al mismo tiempo, OP solicitó una solución sin establecer un encabezado personalizado o usando beforeSend, por lo que he estado buscando una explicación más clara. Espero que mis conclusiones proporcionen algo de luz a otros.

El código

jQuery.ajax({ 
    .... 
    accepts: "application/json; charset=utf-8", 
    .... 
}); 

no funciona porque accepts debe haber una PlainObject (no un String) de acuerdo con el documento jQuery (http://api.jquery.com/jquery.ajax/). Específicamente, jQuery espera cero o más pares clave-valor relacionando cada dataType con el tipo MIME aceptado para ellos. Así que lo que finalmente he usando es:

jQuery.ajax({ 
    .... 
    dataType: 'json', 
    accepts: { 
     json: 'application/json' 
    }, 
    .... 
}); 
+0

Esto no funciona para mí (jQuery 1.9.1). El encabezado Aceptar se establece en '*. *' (Al menos en Chrome y Firefox). Usar la opción de "encabezados" de karthick sí funciona. – chichilatte

+1

Sí, es un 'PlainObject', pero no hay una explicación de cuáles deberían ser las teclas ... – nicodemus13

13

En las últimas versiones de jQuery, el establecimiento de "tipo de datos" a un valor apropiado establece también la acepta cabecera. Por ejemplo, dataType: "json" establece el encabezado de aceptación en Accept: application/json, text/javascript, */*; q=0.01.

6

Las otras respuestas no responden a la pregunta real, sino que proporcionan soluciones provisionales, lo cual es una lástima porque, literalmente, lleva 10 segundos averiguar cuál es la sintaxis correcta para el parámetro accepts.

El parámetro accepts toma un objeto que asigna el dataType al encabezado Accept. En su caso, no necesita ni siquiera pasar el objeto accepts, ya que establecer el tipo de datos a json debería ser suficiente.Sin embargo si desea configurar un encabezado personalizado Accept esto es lo que hace:

accepts: {"*": "my custom mime type" },

¿Cómo puedo saber? Abra el código fuente de jquery y busque "acepta". El primer hallazgo dice todo lo que necesita saber:

accepts: { 
     "*": allTypes, 
     text: "text/plain", 
     html: "text/html", 
     xml: "application/xml, text/xml", 
     json: "application/json, text/javascript" 
    }, 

Como se puede ver las asignaciones por defecto son a text, html, xml y json tipos de datos.

Cuestiones relacionadas