javascript,如何从XML中获取值
我正在学习如何使用javascript使用XMLHttpRequest类从ASMX服务调用web方法。我设法写了以下内容:javascript,如何从XML中获取值,javascript,c#,xml,Javascript,C#,Xml,我正在学习如何使用javascript使用XMLHttpRequest类从ASMX服务调用web方法。我设法写了以下内容: function GetDataService() { if (window.XMLHttpRequest) { xmlHTTP = new window.XMLHttpRequest; } else { alert("Wrong!");
function GetDataService() {
if (window.XMLHttpRequest) {
xmlHTTP = new window.XMLHttpRequest;
} else {
alert("Wrong!");
}
xmlHTTP.open("POST", "http://localhost:45250/ServiceJava.asmx", true);
xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHTTP.setRequestHeader("SOAPAction", "http://localhost:45250/ServiceJava.asmx/GetTimeString");
strRequest = '<?xml version="1.0" encoding="utf-8"?>';
strRequest = strRequest + '<soap:Envelope '
+ 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
+ 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" '
+ 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
strRequest = strRequest + '<soap:Body>';
strRequest = strRequest + '<GetTimeString xmlns="http://localhost:45250/ServiceJava.asmx" />';
strRequest = strRequest + '</soap:Body>';
strRequest = strRequest + '</soap:Envelope>';
//Different value for readystate
//0--Uninitialized
//1--Loading
//2--loaded(but data not recieved)
//3--Interactive--Some part of the data is recieved
//4--Completed(all data recieved)
xmlHTTP.onreadystatechange = function () {
if (xmlHTTP.readyState == 4 && xmlHTTP.status == 200) {
var x = xmlHTTP.responseXML;
document.getElementById("time").textContent = x;
}
}
xmlHTTP.send(strRequest);
}
函数GetDataService(){
if(window.XMLHttpRequest){
xmlHTTP=newwindow.XMLHttpRequest;
}否则{
警惕(“错误!”);
}
open(“POST”http://localhost:45250/ServiceJava.asmx“,对);
setRequestHeader(“内容类型”,“text/xml;charset=utf-8”);
setRequestHeader(“SOAPAction”http://localhost:45250/ServiceJava.asmx/GetTimeString");
strequest='';
strRequest=strRequest+'';
strRequest=strRequest+'';
strRequest=strRequest+'';
strRequest=strRequest+'';
strRequest=strRequest+'';
//readystate的值不同
//0--未初始化
//1--装载
//2--已加载(但未接收数据)
//3--交互--接收部分数据
//4——已完成(收到所有数据)
xmlHTTP.onreadystatechange=函数(){
if(xmlHTTP.readyState==4&&xmlHTTP.status==200){
var x=xmlHTTP.responseXML;
document.getElementById(“时间”).textContent=x;
}
}
发送(strRequest);
}
但它产生了代码:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetTimeStringResponse xmlns="http://localhost:45250/ServiceJava.asmx"><GetTimeStringResult>14:31:28</GetTimeStringResult></GetTimeStringResponse></soap:Body></soap:Envelope>
14:31:28
现在我只想得到14:31:28
。我该怎么做?我试图找到答案,但x
似乎没有类似getElementByTagName()
或任何类似的方法
谢谢 例如,您可以使用该方法
var response=“例如,您可以使用该方法
var response=“我建议不要手工编写XMLHttpRequests。而是使用jQuery.ajax():
“postData”应该是一个JSON对象,您可以在其中向端点传递参数 我建议不要手工编写XMLHttpRequests。而是使用jQuery.ajax():
“postData”应该是一个JSON对象,您可以在其中向端点传递参数 不使用jQuery的解决方案
var xmlStr = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope ...';
var xml = new window.DOMParser().parseFromString(xmlStr, "text/xml");
var value = xml.getElementsByTagName("GetTimeStringResult")[0].innerHTML;
var xmlStr='不使用jQuery的解决方案
var xmlStr = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope ...';
var xml = new window.DOMParser().parseFromString(xmlStr, "text/xml");
var value = xml.getElementsByTagName("GetTimeStringResult")[0].innerHTML;
var xmlStr='Hi。谢谢你提供的信息。不幸的是,使用这个类是我的任务,否则我会查看jQuery
我猜:)在内部,jQuery.ajax()还创建了一个XMLHttpRequest,它只是让您不必直接处理SOAP XML.Hi。谢谢你提供的信息。不幸的是,使用这个类是我的任务,否则我会研究jQuery
我猜:)在内部,jQuery.ajax()还创建了一个XMLHttpRequest,它只是让您不用直接处理SOAP XML。正如我在上面写的,我“被迫”使用香草javascript。但既然我已经收到了结果,我想我可能会使用jQuery
来获得结果。但是既然我已经收到了结果,我想我可能会使用jQuery
来得到我的结果。我接受了这个答案,因为它没有使用jQuery
,出于这个特殊的原因,我需要它。但是我有一些问题。。。如果我的xmlStr
来自(..).responseXML
,那么为什么我要创建一个字符串,然后再次将其转换为XML,最后使用getElement…
?为什么我不能处理原始XML?它是只读的还是什么?似乎您必须将内容类型头设置为text/xml:它表示如果服务器未将内容类型头指定为text/xml或application/xml,则可以使用overrideMimeType()强制XMLHttpRequest将其解析为XML。
问题是服务器将内容类型指定为text/XML
,所以这有点奇怪。我接受了这个答案,因为它没有使用jQuery
,出于这个特殊原因,我需要它。但是我有一些问题。。。如果我的xmlStr
来自(..).responseXML
,那么为什么我要创建一个字符串,然后再次将其转换为XML,最后使用getElement…
?为什么我不能处理原始XML?它是只读的还是什么?似乎您必须将内容类型头设置为text/xml:它表示如果服务器未将内容类型头指定为text/xml或application/xml,则可以使用overrideMimeType()强制XMLHttpRequest将其解析为XML。
问题是服务器将内容类型指定为text/XML
,所以这有点奇怪。
var xmlStr = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope ...';
var xml = new window.DOMParser().parseFromString(xmlStr, "text/xml");
var value = xml.getElementsByTagName("GetTimeStringResult")[0].innerHTML;