解决xmlhttp.responseXML.getElementsByTagName取不到值的问题

本文介绍了一种解决在服务器端设置了特定头部的情况下,使用XMLHttpRequest获取的内容无法通过responseXML方式正常解析的问题。通过使用ActiveXObject加载返回的XML文本,可以成功进行DOM操作。

问题:
服务器端有指定头部:response.setContentType("text/xml;charset=UTF-8");
使用xmlhttp.responseText有内容,而xmlhttp.responseXML.getElementsByTagName("xmltag")就为空。

解决方法:
var doc = new ActiveXObject("MSxml2.DOMDocument")
doc.loadXML(xmlhttp.responseText);
doc.getElementsByTagName("xmltag");

转载于:https://www.cnblogs.com/ga0404/archive/2010/04/03/1703570.html

if (x == 1){ xmlhttp.open("post", "../cgi-bin/getxml", false); SafeHttpSend(xmlhttp, "cmd=get"+";func=netRTSPCfgEx"); try{ if (xmlhttp.readyState==4 && xmlhttp.status==200){ xmlDoc=xmlhttp.responseXML; RTSPPORT = xmlDoc.getElementsByTagName("rtspport")[0].childNodes[0].nodeValue; } }catch(e) {alert(ALERTGETRTSPPORT);} xmlhttp.open("post", "../cgi-bin/getxml", false); SafeHttpSend(xmlhttp, "cmd=get"+";func=localCfgEx"); try{ if (xmlhttp.readyState==4 && xmlhttp.status==200){ xmlDoc=xmlhttp.responseXML; FILEPATH = xmlDoc.getElementsByTagName("RecPath")[0].childNodes[0].nodeValue; } }catch(e) {alert(ALERTGETFILEPATH);} xmlhttp.open("post", "../cgi-bin/getxml", false); SafeHttpSend(xmlhttp, "cmd=get"+";func=videoEncodingCfgEx"); try{ if (xmlhttp.readyState==4 && xmlhttp.status==200){ xmlDoc=xmlhttp.responseXML; MainType = xmlDoc.getElementsByTagName("encoder")[0].childNodes[0].nodeValue; MainCif = xmlDoc.getElementsByTagName("sys_cif")[0].childNodes[0].nodeValue; Mainfps = xmlDoc.getElementsByTagName("frmrate")[0].childNodes[0].nodeValue; SubType = xmlDoc.getElementsByTagName("encoder2")[0].childNodes[0].nodeValue; SubCif = xmlDoc.getElementsByTagName("sys_cif2")[0].childNodes[0].nodeValue; Subfps = xmlDoc.getElementsByTagName("frmrate2")[0].childNodes[0].nodeValue; ThirdType = xmlDoc.getElementsByTagName("encoder3")[0].childNodes[0].nodeValue; ThirdCif = xmlDoc.getElementsByTagName("sys_cif3")[0].childNodes[0].nodeValue; Thirdfps = xmlDoc.getElementsByTagName("frmrate3")[0].childNodes[0].nodeValue; } }catch(e) {alert(ALERTGETFILEPATH);} }
06-13
<!-- this macro will render an employee no selector PARAMETERS: fieldName callbackName - callback function name, default will call the field filling funtion. --> <#macro employeeSelector fieldName callbackName="" onChange=""> <#assign ww = JspTaglibs["/WEB-INF/webwork.tld"] /> <#assign base = req.contextPath /> <script type="text/javascript" src="${base}/js/xmlextras.js"></script> <script> var employeeSearchPopup; var windowOptions = "directories=no,location=no,width=700,height=500,alwaysRaised=yes,resizable=yes,scrollbars=yes"; function popupSelector_${fieldName?replace(".", "_")}() { employeeSearchPopup = window.open('${base}/exporthr/index.action', 'employeeSearchPopup', windowOptions); employeeSearchPopup.focus(); <#if callbackName == ""> callback = function (employeeNo){ document.getElementById('${fieldName}').value = employeeNo; employeeSearchPopup.close(); <#if onChange!="">${onChange?if_exists}();</#if> }; <#else> callback = function (employeeNo) { ${callbackName}(employeeNo); }; </#if> } function checkEmployeeNo${onChange?if_exists}(inputField) { var employeeNo = inputField.value; inputField.value = employeeNo.toUpperCase(); var result = "fail"; if(employeeNo != null && employeeNo.length > 0){ var xmlHttp = XmlHttp.create(); var async = false; xmlHttp.open("GET", "${base}/exporthr/checkEmployeeNo.action?employeeNo=" + inputField.value, async); xmlHttp.send(null); if(xmlHttp.responseText != null && xmlHttp.responseText == '<success/>'){ result= "success"; }else if(xmlHttp.responseXML != null && xmlHttp.responseXML.getElementsByTagName("success").length > 0){ result= "success"; }else{ alert("Can not find an employee with the No. " + employeeNo); inputField.focus(); inputField.select(); } }else result= "success"; <#if onChange!="">if(result== "success")${onChange?if_exists}();</#if> } </script> <@ww.textfield name="'${fieldName}'" id="${fieldName}" size="20" theme="'simple'" onblur="'checkEmployeeNo${onChange?if_exists}(this);'"/> <a href="#" onclick="popupSelector_${fieldName?replace(".", "_")}();"><img src="${base}/images/icon_usergroups_sml.gif" align="absmiddle"/></a> </#macro>
最新发布
08-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值