jQuery를 사용하여 Accept HTTP 헤더를 올바르게 설정할 수 없습니다.
다음 jquery 코드를 사용하여 Accept HTTP 헤더를 "text/xml"로 설정하려고 합니다.
$.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());
}
});
파이어폭스에서는 매우 잘 동작합니다.
그러나 IE에서는 Accept 헤더로 설정하려고 하는 값이 끝에 추가되어 다음과 같이 됩니다.Accept: */*, text/xml이것에 의해, 나의 ajax 콜은, 내가 원하는 xml 버전이 아닌 html 버전을 반환합니다.
IE 8에서 Accept 헤더를 올바르게 설정/삭제하는 방법을 아는 사람이 있습니까?
갱신일 :내가 들어갔을 때 어떤 이유에서인지 별표가 나타나지 않았다.IE의 Accept Header는 다음과 같습니다.Accept: */*, text/xml.
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) {
...
}
})
그래도 문제가 있으면 그렇게 해 보세요.
jQuery 1.5+ 를 사용하면, accepts 헤더를 다음과 같이 설정할 수 있습니다.dataType다음과 같은 작업을 수행할 수 있습니다.
$.ajax({
dataType: ($.browser.msie) ? "text" : "xml",
accepts: {
xml: "text/xml",
text: "text/xml"
}
});
고객님의 문제는 http://www.grauw.nl/blog/entry/470에 설명되어 있는 문제인 것 같습니다.이 문제는 현재 XMLHttpRequest 사양에 사용자 에이전트가 요청에 대해 기본적으로 Accept 헤더를 설정하지 않도록 명시되어 있기 때문에 req.setRequest가Header()는 새로운 Accepts만 추가할 수 있습니다.안타깝게도 브라우저는 아직 이를 준수하지 않습니다.문제의 기입을 통해 브라우저가 정상적으로 동작하는지 테스트할 수 있지만 안타깝게도 IE7, Chrome, Safari, Firefox 및 Opera는 모두 실패합니다.
Laurens Grauw는 또한 먼저 Accept 헤더를 무효화하려고 하는 것의 효과에 대해 이야기합니다.
setRequestHeader('Accept', '')
또는
setRequestHeader('Accept', null)
이게 도움이 될 거야
추악한 서버 측 해킹:서버 측 앱을 제어할 수 있는 경우 항상 XML을 반환하도록 유선 연결하거나, "application/i-really-want-xml"과 같은 사용자 지정 미디어 유형에 대한 지원을 추가하거나, "X-Accept"와 같은 사용자 지정 HTTP 헤더에 대한 지원을 추가할 수 있습니다.
원래 포스터는 http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx이라는 링크를 언급하고 있었을지도 모릅니다만, 이것은 여러분이 보는 행동을 설명해주지 않습니다.
IE 자체로는 사용자가 설명한 동작이 없기 때문에 XMLHTTPRequest를 통한 Accept 헤더를 설정하면 올바르게 동작합니다.IE8에서 확인 테스트를 했습니다.
사용 중인 jQuery 버전에 문제가 있을 수도 있고, 아니면 트래픽을 망치는 플러그인이 있을 수도 있습니다.
문서에는 이렇게 기재되어 있지 않지만, 저는 그렇게 할 수 있었습니다.
jQuery.ajax({
type: "POST",
url: "...",
data: ...,
contentType: "text/xml",
beforeSend: function(req) {
req.setRequestHeader("Accept", "text/xml");
}, ...});
IE(어느 버전이든)가 Accept 헤더와 잘 어울리지 않는다고 생각합니다.다음 링크를 참조하십시오.[ http://blogs.msdn.com/ieinternals/archive/2009/07/01/IE-and-the-Accept-Header.aspx ]
가능한 해결책은 사용자 에이전트가 IE인지 확인하는 것입니다.이 경우 text/xml이 있는지 확인합니다.
행운을 빕니다.
편집:
링크에 반대 의견이 있습니다.IE는 항상 /를 추가하고 accept 헤더를 설정하면 / 뒤에 원하는 MIME 유형이 추가된다는 것이 제 예감입니다.
언급URL : https://stackoverflow.com/questions/1145588/cannot-properly-set-the-accept-http-header-with-jquery
'codememo' 카테고리의 다른 글
| Facebook SDK가 오류를 반환했습니다. 교차 사이트 요청 위조 유효성 검사에 실패했습니다.URL과 세션의 "상태" 매개 변수가 일치하지 않습니다. (0) | 2023.03.19 |
|---|---|
| react-router 4.0, react-router-dom 및 react-router-redux의 차이점은 무엇입니까? (0) | 2023.03.19 |
| 각도의 ng클릭 이벤트 위임 (0) | 2023.03.19 |
| Angular 전개 방법JS 앱과 Spring Restful API 서비스가 동일한 도메인/서버에 있습니까? (0) | 2023.03.19 |
| 각도로 모든 컨트롤러에서 기능을 사용할 수 있습니까? (0) | 2023.03.19 |