Не удается правильно установить HTTP-заголовок Accept с помощью jQuery

Я пытаюсь установить для заголовка Accept HTTP значение "text / xml". с этим кодом 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());
    }              
});

В Firefox это прекрасно работает.

Но в IE значение, которое я пытаюсь установить для заголовка Accept, похоже, добавляется в конец, поэтому оно становится:Accept: */*, text/xml, Это приводит к тому, что мой вызов ajax возвращает версию html, а не версию xml, которую я хочу.

Кто-нибудь знает, как правильно установить / очистить заголовок Accept в IE 8?

Обновлено: по какой-то причине звездочки не появлялись, когда я их вводил. Заголовок Accept в IE выглядит так:Accept: */*, text/xml.

Ответы на вопрос(6)

не только в IE, но также в Chrome и Safari с использованием jQuery 1.6.2. Это решение работает, как и предполагалось, во всех браузерах, которые я пробовал (Chrome, Safari, IE, Firefox).

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

Попробуйте, если это все еще доставляет вам неприятности.

http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx однако это не объясняет поведение, которое вы видите.

IE сам по себе не соответствует описанному вами поведению, и установка заголовка Accept через XMLHTTPRequest должна работать правильно. Я проверил в IE8 для подтверждения.

Возможно, в вашей версии jQuery есть проблема, или, возможно, у вас есть какой-то плагин, который искажает ваш трафик?

как в документации говорится, что это нужно сделать, это то, что мне помогло.

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

dataType так что вы можете сделать что-то вроде этого:

$.ajax({
    dataType: ($.browser.msie) ? "text" : "xml",
    accepts: {
        xml: "text/xml",
        text: "text/xml"
    }
});
 29 мая 2015 г., 20:44
Из источника 1.11.1- принимает: {& quot; * & quot ;: allTypes, text: & quot; text / plain & quot ;, html: & quot; text / html & quot ;, xml: & application; текст / JavaScript & Quot; }, & APOS;
 29 мая 2015 г., 21:10
Так что это ожидаемые принятия, и, как указано выше, вы также должны установить dataType.

что IE (любая версия) хорошо работает с заголовком Accept. Смотрите эту ссылку: [http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx]

Возможное решение может состоять в том, чтобы проверить пользовательский агент, чтобы увидеть, является ли он IE. Если это так, то проверьте наличие текста / xml.

Удачи!

Edit:

Оппс по ссылке. Я догадывался, что IE всегда добавляет/ и установка заголовка принятия просто добавляет желаемый тип пантомимы после/.

 20 июл. 2009 г., 18:02
Он не добавляет только /. Это фактически добавляет: * / * Проблема форматирования в вопросе
 21 июл. 2009 г., 13:36
Да, я подумал, что это проблема форматирования ... Я столкнулся с тем же

http://www.grauw.nl/blog/entry/470, Проблема в том, чтоСпецификация XMLHttpRequest в настоящее время говорится, что пользовательские агенты не должны устанавливать заголовки Accept по умолчанию для запроса, так что req.setRequestHeader () может просто добавлять новые Accepts. К сожалению, браузеры этого еще не придерживаются. Проблема записи позволяет вам проверить ваш браузер, чтобы убедиться, что он работает должным образом, и, к сожалению, IE7, Chrome, Safari, Firefox и Opera не работают.

Лорен Гроу также говорит об эффектах первой попытки обнулить заголовок Accept с помощью

setRequestHeader('Accept', '')

или же

setRequestHeader('Accept', null)

Это может помочь здесь.

Уродливые взломы на стороне сервера. Если у вас есть контроль над приложением на стороне сервера, вы можете жестко связать его с возможностью всегда возвращать XML, добавить поддержку для пользовательского типа мультимедиа, например & quot; application / i-Действительно-want-xml & quot; или добавить поддержку для пользовательский HTTP-заголовок, такой как «X-Accept».

 20 июл. 2010 г., 14:21
setRequestHeader («Принять», «ноль») выдает «несоответствие типов» в IE8 Установка его на & quot; первые работы!

Ваш ответ на вопрос