Estoy tratando de establecer el Aceptar la cabecera HTTP «text/xml» con este código jquery:

$.ajax({
    beforeSend: function(req) {
        req.setRequestHeader("Accept", "text/xml");
    },
    type: "GET",
    url: "[proper url]",
    contentType: "text/plain; charset=utf-8",
    dataType: ($.browser.msie) ? "text" : "xml",
    username: '---',
    password: '-------',                                
    success: function(data) {
        var xml;
        if (typeof data == "string") {
            alert("Data is string:" + data);
            xml = new ActiveXObject("Microsoft.XMLDOM");
            xml.async = false;
            xml.loadXML(data);
        } else {
            xml = data;
            alert("Data is not string:" + $(xml).text());
        }
        //Returned data available in object "xml"
        //alert("Status is: " + xml.statusText);
        $("#ingest_history").html($(xml).text());
    }              
});

En firefox funciona muy bien.

Pero en IE, el valor que estoy tratando de establecer para el encabezado Accept parece que se anexa al final lo que se convierte en: Accept: */*, text/xml. Esto hace que mi llamada ajax para volver a la versión html como contraposición a la versión de xml que quiero.

¿Alguien sabe cómo configurar correctamente/eliminar el encabezado Accept en IE 8?

Actualizado: Por alguna razón, los asteriscos no aparecen como he entrado en ellos. El Encabezado de aceptación en IE parece ser: Accept: */*, text/xml.

InformationsquelleAutor | 2009-07-17

6 Comentarios

  1. 70

    También tuve problemas con esto, no solo en IE pero también en Chrome y Safari utilizando jQuery 1.6.2. Esta solución parece funcionar como se pretende en todos los navegadores que he probado (Chrome, Safari, IE, Firefox).

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

    Tratar de que si esto sigue dando problemas.

  2. 24

    Usando jQuery 1.5+ puede establecer la acepta encabezados por dataType así que usted puede hacer algo como esto:

    $.ajax({
        dataType: ($.browser.msie) ? "text" : "xml",
        accepts: {
            xml: "text/xml",
            text: "text/xml"
        }
    });
    • De la fuente de 1.11.1- ‘ acepta: { «*»: allTypes, texto: «text/plain», html: «text/html», xml: «application/xml, text/xml», json: «application/json, text/javascript» },’
    • Así que estas son las acepta que se espera y como anteriormente se debe establecer el tipo de datos también.
  3. 8

    Tu problema parece ser el que se describe a continuación: http://www.grauw.nl/blog/entry/470. El problema es que la XMLHttpRequest especificación actualmente establece que los agentes de usuario deberían no Aceptar encabezados por defecto en la solicitud, por lo que req.setRequestHeader() sólo puede anexar nuevos Acepta. Desafortunadamente, los navegadores no se adhieren a este. El problema de la valoración crítica le permite probar su navegador para ver si funciona correctamente, y por desgracia IE7, Chrome, Safari, Firefox y Opera, todos fallan.

    Laurens Grauw también habla sobre los efectos de la primera tratando de null a cabo el encabezado Accept con

    setRequestHeader('Accept', '')

    o

    setRequestHeader('Accept', null)

    Estos pueden ayudar aquí.

    Feo del lado del servidor hacks: Si usted tiene control sobre su lado del servidor de la aplicación que puedes enchufar a devolver siempre XML, añadir soporte para un custom tipo de medios como «application/i-en realidad-quiero-xml», o añadir soporte para un encabezado HTTP personalizado como «X-Aceptar».

    • setRequestHeader(‘Aceptar’, null) da «type mismatch» en IE8 ajustar «» primeras obras!
  4. 2

    Creo que el cartel original podría haber estado refiriéndose a este enlace: http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx sin embargo, esto no explica el comportamiento que se observa.

    Es decir, no hace, por sí mismo, el comportamiento que usted describe, y establecer el encabezado de aceptación a través de XMLHTTPRequest debería funcionar correctamente. He probado en IE8 para confirmar.

    Es posible que haya un problema en su versión de jQuery, o tal vez usted tiene algún plugin destrozando su tráfico?

  5. 1

    Aunque esto no es cómo los estados de documentación que se necesita hacer, es lo que funcionó para mí.

     jQuery.ajax({
        type: "POST",
        url: "...",
        data: ...,
        contentType: "text/xml",
        beforeSend: function(req) {
        req.setRequestHeader("Accept", "text/xml");
        },  ...});
  6. 0

    No creo que el internet explorer(cualquier versión) juega bien con el encabezado Accept. Ver en este enlace: [http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx%5D

    Una posible solución podría ser la de comprobar que el Agente de Usuario para ver si es IE. Si es así, a continuación, compruebe la presencia de texto/xml.

    Buena Suerte!

    Edición:

    Opps en el enlace. Mi corazonada era IE es añadir siempre el / y establecer el encabezado accept solo se agrega la deseada tipo mime después de la /.

    • No acaba de añadir la /. Se añade: */* problema de Formato en la pregunta
    • Sí, yo pensé que era un problema de formato… me enfrenté a la misma cosa

Dejar respuesta

Please enter your comment!
Please enter your name here