• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    异步调用webservice返回responseXML为空的问题解决方法
    先总结几个要领
    1)要熟悉javascript对XML文件的加载与操作;
    DOM的XML操作可参考的示例:http://www.w3school.com.cn/xmldom/met_document_getelementsbytagname.asp
    2)在IE下面还是要通过loadXML来转responseText;
    3)xml加载后异步属性设置;
    4)命名空间处理等问题;
    下面上代码:
    ========ASPX前台代码========
    复制代码 代码如下:

    %@ 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() {
    //这是我们在第一步中创建的Web服务的地址
    var URL = "http://localhost:3165/WebSite2/Service.asmx";
    //在这处我们拼接
    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>';
    //创建异步对象
    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); // 这个有
    //var xmlDoc = xmlHttp.responseXML; // 这个是空的,但下面会让它出来
    var xmlDoc = loadXMLDoc();
    xmlDoc.setProperty("SelectionNamespaces", 'xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ws="http://tempuri.org/" ');
    // 这面这段是命名空间(包含显示与匿名的两种)处理方法,必须加上!
    var node = xmlDoc.selectSingleNode("/soap:Envelope/soap:Body/ws:HelloWorldResponse/ws:HelloWorldResult"); //这边能有值就OK了,为了它前后消耗了1周时间!
    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 需要用loadXML
    //xmlDoc.load(xmlHttp.responseText); // 加载xml文档需要用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>

    ========后台CS文件========
    其实这段没有实质内容
    复制代码 代码如下:

    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代码========
    复制代码 代码如下:

    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)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class Service : System.Web.Services.WebService
    {
    public Service () {
    //如果使用设计的组件,请取消注释以下行
    //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>

    结束!
    您可能感兴趣的文章:
    • php的webservice的wsdl的XML无法显示问题的解决方法
    • 关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
    • 分享XmlHttpRequest调用Webservice的一点心得
    • Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
    • WebService传XML 简单实例
    上一篇:URL中去除指定参数实现C#代码
    下一篇:Repeater里switch的使用方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    异步调用webservice返回responseXML为空的问题解决方法 异步,调用,webservice,返回,