2012-10-16 8 views
0

"간단한"자바 스크립트 애플리케이션을 개발하는 동안 이상한 동작이 발생합니다. 함수는 고전적인 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 응답을 얻는 상호 호환 방법은 무엇입니까?

+0

_jQuery 라이브러리 또는 기타 외부 libs_를 사용하고 싶지 않습니다. 왜 그렇지 않습니까? 이 문제는 임의의 수의 크로스 브라우저 아약스 라이브러리로 해결할 수 있습니다. – jrummell

+0

jQuery를 사용하면 매우 쉽다는 것을 알고 있습니다. 그러나 매우 구체적인 이유로 그것을 사용하면 안됩니다;) – TheUnexpected

+0

PHP 스크립트 출력 적절한 content-type 헤더가 있습니까? 나는 몇몇 브라우저가 틀린 content-type 헤더를받을 때 까다 롭다는 것을 안다. – thaJeztah

답변

0

사용 다음)

P.S는 : 나는 jQuery 라이브러리 또는 다른 외부 libs와 사용하지 않습니다.

var parent = responseXml.getElementsByTagName("MYreply"); 
var resultvalue = parent[0].getAttribute('result'); 
관련 문제