0

次のコードで 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 "";
   }

ただし、結果として文字列を返すメソッドでのみ機能します。dataSet を返す必要がある場合はどうすればよいですか?

4

1 に答える 1

0

jQuery を使用するだけです ^^ さまざまな戻り値の型に対してさまざまなハンドラーがたくさんあります。dataSet は JSON または XML でエンコードでき、jQuery によって自動的に JS データ構造に転送されます。さらに、jQuery には一連のAJAX メソッドが付属しているため、JS コードはよりきれいに見えます。xml 応答を JS データ構造に変換するには、jQuery 要求でdataTypetoを設定するだけです。xml例えば:

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

解析された xml 応答を JS で処理する方法については、こちらを参照してください。

于 2012-09-24T13:18:52.993 に答える