An asynchronous call to webservice returns a problem solving method where responseXML is empty

  • 2020-05-30 19:48:57
  • OfStack

First, summarize the following points:
1) be familiar with the loading and operation of javascript to XML files;
DOM XML operation reference sample: http: / / www w3school. com. cn/xmldom/met_document_getelementsbytagname asp
2) under IE, responseText should be transferred through loadXML;
3) setting asynchronous property of xml after loading;
4) namespace processing;
The following code:
========ASPX foreground code ======== ==
 
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div id="div1"> 
</div> 
</form> 
<p><input id="Button1" type="button" value="button" onclick="RequestWebService();" /></p> 
<script type="text/javascript"> 
var sUsrAgent = navigator.userAgent; 
var isIE = sUsrAgent.indexOf("MSIE") != -1; 
var isIE6 = isIE && sUsrAgent.indexOf("MSIE 6.0") != -1; 
var isIE7 = isIE && sUsrAgent.indexOf("MSIE 7.0") != -1; 
var isFF = sUsrAgent.indexOf("Firefox") != -1; 
var isOP = sUsrAgent.indexOf("Opera") != -1; 
var isSF = sUsrAgent.indexOf("Safari") != -1 && sUsrAgent.indexOf("Chrome") == -1; 
var isCH = sUsrAgent.indexOf("Chrome") != -1; 
var xmlHttp; 
function RequestWebService() { 
// This is us at number one 1 Created in step Web Service address  
var URL = "http://localhost:3165/WebSite2/Service.asmx"; 
// And here we're splicing  
var data; 
data = '<?xml version="1.0" encoding="utf-8"?>'; 
data = data + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">'; 
data = data + '<soap12:Body>'; 
data = data + '<HelloWorld xmlns="http://tempuri.org/" />'; 
data = data + '</soap12:Body>'; 
data = data + '</soap12:Envelope>'; 
// Creating asynchronous objects  
xmlHttp = GetXmlHttpObject(); 
xmlHttp.open("POST", URL, false); 
if (xmlHttp.overrideMimeType) { 
xmlHttp.overrideMimeType('text/xml'); 
} 
xmlHttp.SetRequestHeader("Content-Type", "application/soap+xml"); 
xmlHttp.onreadystatechange = stateChanged; 
xmlHttp.Send(data); 
} 
function stateChanged() { 
if (xmlHttp.readyState == 4) { 
if (xmlHttp.status == 200) { 
alert(xmlHttp.getAllResponseHeaders()); 
alert(xmlHttp.responseText); //  This is  
//var xmlDoc = xmlHttp.responseXML; //  This one is empty, but the bottom will let it come out  
var xmlDoc = loadXMLDoc(); 
xmlDoc.setProperty("SelectionNamespaces", 'xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://tempuri.org/" '); 
//  This side and this section are namespace (both display and anonymous) handling methods, must be added!  
var node = xmlDoc.selectSingleNode("/soap:Envelope/soap:Body/ws:HelloWorldResponse/ws:HelloWorldResult"); // I could have a value here OK Well, it's used up front and back for it 1 Weeks time!  
document.getElementById("div1").innerHTML = node.nodeTypedValue; 
} 
} 
} 
function GetXmlHttpObject() { 
var xmlHttp = null; 
try { 
// Firefox, Opera 8.0+, Safari 
xmlHttp = new XMLHttpRequest(); 
} 
catch (e) { 
// Internet Explorer 
try { 
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch (e) { 
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
} 
return xmlHttp; 
} 
function loadXMLDoc() { 
var xmlDoc; 
if (isIE) { 
xmlDoc = getMSXmlParser(); 
xmlDoc.async = false; 
xmlDoc.loadXML(xmlHttp.responseText); //webservice response  Need to use loadXML 
//xmlDoc.load(xmlHttp.responseText); //  loading xml The document needs to be load 
} 
else { 
xmlDoc = xmlHttp.responseXML; 
if (!xmlDoc) { 
xmlDoc = (new DOMParser()).parseFromString(xmlHttp.responseText, 'text/xml'); 
} 
} 
return xmlDoc; 
} 
function getMSXmlParser() { 
var parser = [ 'Msxml2.DOMDocument.6.0', 
'Msxml2.DOMDocument.5.0', 
'Msxml2.DOMDocument.4.0', 
'Msxml2.DOMDocument.3.0', 
'MSXML2.DOMDocument', 
'Microsoft.XMLDOM']; // the same as MSXML.DOMDocument 
for (var i in parser) { 
try { 
var xParser = new ActiveXObject(parser[i]); 
if (xParser) { 
return xParser; 
} 
} 
catch (e) { } 
} 
return null; 
} 
</script> 
</body> 
</html> 

======== background CS file ======== =
There's no substance to it
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
} 
} 

= = = = = = = = WebService code = = = = = = = =
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
//  If allowed  ASP.NET AJAX  Call this from the script  Web  Service, please uncomment the downstream.  
// [System.Web.Script.Services.ScriptService] 
public class Service : System.Web.Services.WebService 
{ 
public Service () { 
// If you are using a designed component, uncomment the following line  
//InitializeComponent(); 
} 
[WebMethod] 
public string HelloWorld() { 
return "Hello World"; 
} 
} 

======== == responseText======== =
 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<HelloWorldResponse xmlns="http://tempuri.org/"> 
<HelloWorldResult>Hello World</HelloWorldResult> 
</HelloWorldResponse> 
</soap:Body> 
</soap:Envelope> 

The end!

Related articles: