ResponseXML返回null或undefined

时间:2011-10-21 09:17:00

标签: php javascript xml ajax

我正在使用实时修补程序而且我被卡住了。

应用程序体系结构的快速说明:脚本向dispatcher.php发送XML请求。在调度程序的顶部,内容类型设置为text / xml。然后根据请求中的属性设置命令:

<request type="buworkflows"><unit>10</unit></request>

因此,对于buworkflows命令,将调用db并返回包含数据的数据集。

应该使用此返回的数据动态生成下拉列表。但是,我在IE中得到了“需要对象”。以下代码在我的开发服务器上的IE和FF中运行良好,但是在实时失败。我无法在现场调试FF;应用程序是为IE量身定制的,任何mod都意味着我会影响实时系统。所以,我现在必须与IE合作。我已经提醒出单元ID和XML请求;一切都很好。对于一种类型的数据集,此特定请求仅失败;其余的工作正常。

我希望这是足够的评论和反馈信息。

真的需要你的帮助。

***最后更新:昨天我解决了这个问题。请参阅我对詹姆斯的评论中的解释。谢谢你的时间和帮助。解决。

更新:WS_DISPATCHER解析为/ws/dispatcher.php。我已经通过调试确认它正确地传递给了AJAX。

更新:对于完成的问题,getRequestObject()

 function getRequestObject() {
resetMsgBar();
var req = null;
if(XMLHttpRequest) {
    req = new XMLHttpRequest();
    if(req.overrideMimeType)
        req.overrideMimeType("text/xml");
}
else if(window.ActiveXObject) {
    try {
        req = new ActiveXObject("msxml2.xmlhttp");
    } catch(e) {
        try {
            req = new ActiveXObject("microsoft.xmlhttp");
        } catch(e) {}
    }
}
if(!req)
    return null;
else
    return req;

}

AJAX代码:

                            var req = getRequestObject();
                            var reqXml = new String();
                            reqXml+= "<request type='buworkflows'>";
                            reqXml+= "<unit>" + id + "</unit>";
                            reqXml+= "</request>";
                            req.open("POST", "<?=WS_DISPATCHER_ADDR?>", true);
                            req.onreadystatechange = function() {
                                if(req.readyState==4) {
                                    if(req.status==200) {
                                        //var wfData = new ActiveXObject("microsoft.xmldom");
                                        //wfData.async = false;
                                        //wfData.load(req.responseXml);
                                        var opt = null;
                                        document.getElementById("type").options.length=0;
                                        opt = document.createElement("option");
                                        opt.text ="Please select the assignment type";
                                        opt.value="-1";
                                        document.getElementById("type").options.add(opt);
                                        //if(wfData.documentElement) {    
                                            for(var i=0; i < req.responseXML.documentElement.childNodes.length; i++) {
                                                opt = document.createElement("option");
                                                var elem = req.responseXML.documentElement.childNodes[i];
                                                opt.value = elem.childNodes[0].childNodes[0].nodeValue;
                                                opt.text = elem.childNodes[2].childNodes[0].nodeValue;
                                                if (undefined != elem.childNodes[3].childNodes[0]){
                        opt.title = elem.childNodes[3].childNodes[0].nodeValue;
                      }
                      document.getElementById("type").options.add(opt);                                              
                      //}                                                                           
                                                //opt.text = req.responseXML.documentElement.childNodes[i].firstChild.selectSingleNode("name").text;                                                    
                                                //opt.value=req.responseXML.documentElement.childNodes[i].selectSingleNode("id").text;
                                                //opt.title=req.responseXML.documentElement.childNodes[i].selectSingleNode("description").text;
                                                //document.getElementById("type").options.add(opt);
                                            }
                                        //}
                  loadAdditionalFields(0);
                                        hideProgressBar();
                                    }
                                }
                            }
            req.send(reqXml);

2 个答案:

答案 0 :(得分:0)

通过添加:

进行调试
if(req.status==200) {
  alert(req.responseText);
  alert(req.responseXML);

并查找php错误

答案 1 :(得分:0)

我在通过代码进行更多调试并检查数据库中的数据之后,昨天解决了这个问题。有一个非ASCII字符使XML数据集无效。原始程序员没有将节点值括在CDATA块中。