【问题标题】:Consuming Web Service with JavaScript (returning dataSet)使用 JavaScript 使用 Web 服务(返回数据集)
【发布时间】:2012-09-24 21:48:38
【问题描述】:

我通过这段代码使用 Javascript 使用 WebService .NET:

// This is where you can place your Javascript code
// var xmlHTTP;

function MButton1Click(event) {
testarTexto();
}


function WebSvc()   // Class Signature
   {
       WebSvc.prototype.CallWebService = function(url, soapXml, callback)
       {

           var xmlDoc = null;

           if (window.XMLHttpRequest)
           {
               xmlDoc = new XMLHttpRequest(); //Newer browsers
           }
           else if (window.ActiveXObject) //IE 5, 6
           {
               xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
           }

           if (xmlDoc)
           {
               var self = this;
               xmlDoc.onreadystatechange = function() { self.StateChange(xmlDoc, callback); };

               xmlDoc.open("POST", url, true);
               xmlDoc.setRequestHeader("Content-Type", "text/xml");
               xmlDoc.setRequestHeader("Content-Length", soapXml.length);
               xmlDoc.send(soapXml);
           }
    else
           {
               if (callback)
               {
                   callback(false, "unable to create XMLHttpRequest object");
               }
           }
       };

       WebSvc.prototype.StateChange = function(xmlDoc, callback)
       {
 if (xmlDoc.readyState === 4)
           {
               var text = "";

               if (xmlDoc.status === 200)
               {
                   text = xmlDoc.responseText;
               }

               // Perform callback with data if callback function signature was provided,
               if (callback !== null)
               {
                   callback(xmlDoc.status === 200, text);
               }
           }
       };
   }


   function createSoapHeader(message)
   {
        var soap = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
   soap = soap + "<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/\">";
   soap = soap + "  <soap:Body>";
   soap = soap + "    <TesteDeTexto xmlns=\"http://tempuri.org/\">";
   soap = soap + "      <pTexto>" + message + "</pTexto>";
   soap = soap + "    </TesteDeTexto>";
   soap = soap + "  </soap:Body>";
   soap = soap + "</soap:Envelope>";
       return soap;
   }

   function callComplete(result, data)
   {
       if (result)
       {
         //alert(getTagValue(data, "TesteDeTextoResult"));
           document.getElementById('MTextArea1').value = getTagValue(data, "TesteDeTextoResult");
       }
       else
       {
           alert("Error occurred calling web service.\n" + result + "\n" +data);
       }
   }
   function testarTexto()
   {

       var soap = createSoapHeader("TESTE");
       //document.getElementById('texto').value = soap;
//     alert(soap);

       var webServiceCall = new WebSvc();

       webServiceCall.CallWebService("http://localhost/WebService/Test.asmx", soap, callComplete);
   }

   function getTagValue(inputStr, tagName)
   {

       var stag = "<" + tagName + ">";
       var etag = "<" + "/" + tagName + ">";

       var startPos = inputStr.indexOf(stag, 0);
       if (startPos >= 0)
       {
           var endPos = inputStr.indexOf(etag, startPos);
           if (endPos > startPos)
           {
               startPos = startPos + stag.length;
               return inputStr.substring(startPos, endPos);
           }
       }

       return "";
   }

但它只适用于返回字符串作为结果的方法。当我需要返回一个数据集时,我该怎么做?

【问题讨论】:

  • 我的回答有帮助吗?如果是,请将答案标记为正确。否则再问;-)

标签: javascript web-services ado.net dataset


【解决方案1】:

只需使用 jQuery ^^ 你会发现很多不同的处理程序用于不同的返回类型。数据集可以用 JSON 或 XML 编码,由 jQuery 自动传输到 JS 数据结构中。此外,JS 代码看起来更干净,因为 jQuery 带有一堆AJAX methods。要将 xml 响应转换为 JS 数据结构,只需在 jQuery 请求中将dataType 设置为xml。例如:

jQuery.ajax('url/to/your/WS', {
   dataType: "xml",
   data: {
      postParam1 : "foo"
   },
   success: function(data) {
      alert(data.find("MyNode"));
   }
});

如何在 JS 中处理解析后的 xml 响应可以找到here

【讨论】:

  • 如果我将字段名称发送到 getTagValue 方法它可以工作...但只有第一行...我该怎么做才能在所有行中进行循环结果?看看 getTagValue 方法,请
  • 在我发布的页面上你可以找到这个: $(xml).find("Tutorial").each(function() !! 这样你就可以遍历每个名​​为 "教程“...顺便说一句,使用字符串操作手动解析 xml 字符串不是一个好主意。请使用我的答案更新您的代码以获取更多问题,谢谢
猜你喜欢
  • 2012-04-08
  • 2019-06-23
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多