"간단한"자바 스크립트 애플리케이션을 개발하는 동안 이상한 동작이 발생합니다. 함수는 고전적인 Ajax/POST 메서드를 통해 매개 변수가있는 요청을 .php 페이지로 보냅니다.AJAX/POST 요청의 responseXML이 Chrome에서만 null입니다.
function sendRequest(params, doAsync, onSending, onDone)
{
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else { // code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState < 4) {
if(typeof onSending == "function") onSending();
}
else if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
if(typeof onDone == "function") {
var resultCode = xmlhttp.responseXML.documentElement.getAttribute("result");
var content = xmlhttp.responseXML.documentElement.childNodes;
onDone(resultCode, content);
}
}
}
xmlhttp.open("POST", "mypage.php", doAsync);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(params);
는 PHP 페이지를 처리하고 다음과 같이 XML 형태로 간단한 결과를 반환 :
이<?xml version="1.0" encoding="utf-8"?>
<MYreply result="0"/>
음 ...이 방법은 크롬에 IE와 파이어 폭스에서 잘 작동하지만, 그 말한다 " 'null의 documentElement'속성을 읽을 수 없습니다 (=> responseXML은 null입니다).
나는 setRequestHeader
의 기능을 Chrome에서 완전히 지원하지 않는다고 읽었습니다 (WebKit "Refused to set unsafe header 'content-length'" 참조). 실제로 Chrome은 실행시 오류를 발생 시키지만 해당 행을 제거하면 응용 프로그램이 IE와 Firefox에서도 작동하지 않게됩니다.
그래서 ... Ajax/POST 요청을 만들고 상대적인 XML 응답을 얻는 상호 호환 방법은 무엇입니까?
_jQuery 라이브러리 또는 기타 외부 libs_를 사용하고 싶지 않습니다. 왜 그렇지 않습니까? 이 문제는 임의의 수의 크로스 브라우저 아약스 라이브러리로 해결할 수 있습니다. – jrummell
jQuery를 사용하면 매우 쉽다는 것을 알고 있습니다. 그러나 매우 구체적인 이유로 그것을 사용하면 안됩니다;) – TheUnexpected
PHP 스크립트 출력 적절한 content-type 헤더가 있습니까? 나는 몇몇 브라우저가 틀린 content-type 헤더를받을 때 까다 롭다는 것을 안다. – thaJeztah