来自Ajax / POST请求的responseXML仅在Chrome上为null

时间:2012-10-16 13:07:40

标签: php javascript xml ajax google-chrome

在开发“简单”的javascript应用程序时,我遇到了一种奇怪的行为。 函数通过传统的Ajax / POST方法向.php页面发送带有一些参数的请求。

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和Firefox下运行良好,但在Chrome上没有,“无法读取属性'documentElement'为null”(=&gt; responseXML为null)。

我认为Chrome并不完全支持setRequestHeader功能(请参阅WebKit "Refused to set unsafe header 'content-length'")。实际上,Chrome在执行时会出错,但删除这些行会导致应用程序在IE和Firefox下失败。

那么......制作Ajax / POST请求并获得相对XML响应的交叉兼容方式是什么?

P.S。:我不想使用jQuery库或其他外部库;)

1 个答案:

答案 0 :(得分:0)

使用以下。

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