Php ResponseXML返回为null或未定义
我正在做一个实时修补程序,我被卡住了 对应用程序体系结构的快速解释:脚本向dispatcher.php发送一个XML请求。在dispatcher的顶部,内容类型设置为text/xml。然后根据请求中的属性设置命令:Php ResponseXML返回为null或未定义,php,javascript,xml,ajax,Php,Javascript,Xml,Ajax,我正在做一个实时修补程序,我被卡住了 对应用程序体系结构的快速解释:脚本向dispatcher.php发送一个XML请求。在dispatcher的顶部,内容类型设置为text/xml。然后根据请求中的属性设置命令: <request type="buworkflows"><unit>10</unit></request> } AJAX代码: var req = getRequestObjec
<request type="buworkflows"><unit>10</unit></request>
}
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);
var req=getRequestObject();
var reqXml=新字符串();
reqXml+=“”;
reqXml+=“”+id+“”;
reqXml+=“”;
请求打开(“POST”和“真”);
req.onreadystatechange=函数(){
如果(req.readyState==4){
如果(请求状态==200){
//var wfData=newActiveXObject(“microsoft.xmldom”);
//wfData.async=false;
//wfData.load(请求响应xml);
var opt=null;
document.getElementById(“type”).options.length=0;
opt=document.createElement(“选项”);
opt.text=“请选择分配类型”;
opt.value=“-1”;
document.getElementById(“type”).options.add(opt);
//if(wfData.documentElement){
对于(变量i=0;i
通过添加以下内容进行调试:
if(req.status==200) {
alert(req.responseText);
alert(req.responseXML);
查找php错误我昨天通过代码进行了更多的调试并检查了数据库中的数据后解决了这个问题。有一个非ASCII字符使XML数据集无效。最初的程序员没有将节点值括在CDATA块中。添加getRequestObject()的实际代码。我建议您安装Fiddler2,并检查在实时环境中从ajax调用获得的实际响应,包括标题和内容。这可能会给你一个线索。
responseText
包含什么?@RoToRA:包含实际的XML。请参阅原始post.responseText中对James答案的评论和我的注释,其中包含实际的XML。有一个无用的非ASCII字符在插入时未被捕获或删除,因此在dispatcher生成XML数据集时使其无效。现在解决了。
if(req.status==200) {
alert(req.responseText);
alert(req.responseXML);