使用 Ajax post SOAP https request 到Web Service


寫這個花了我很多時間去研究,不管JQUERY如何寫AJAX都失敗,後來才發現是跨網域的問題…

> JQuery
$(document).ready(function () 
{
    Hello();
    function Hello() 
    { 
        //這個XML格式可以在Web Service的HELP裡看到         
        var soapXMLMessage = 
        '<?xml version="1.0" encoding="utf-8"?>
        <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:Header>
        … *** 這邊通常是你定義的SOAP Header XML *** …
        </soap:Header>
        <soap:Body>
        … *** 這邊通常是你定義的Web Service Method XML *** …
        </soap:Body>
        </soap:Envelope>';

        //這邊放你Web Service的Url
        var soapUrl = 'https://localhost:123/WebServiceUrl.asmx'; 

        $.ajax({                            
             type:"POST",
             url: soapUrl,
             data: soapXMLMessage,
             dataType: "xml",
             contentType: "text/xml; charset=utf-8",                            
             success: function OnSuccess(data, status)
          {
            alert(data.firstChild.textContent);
          },
             error: function OnError(request, status)
          {
            alert(request.status + ' ' + request.statusText);
          }
        });
    }
});


如果有跨網域的問題,例如Chrome瀏覽器都有這問題,還要加上這個設定:

> Web Service Config
<system.webServer>
    <httpProtocol>            
        <customHeaders>
        <!--允許哪個 Client Url 進行 ajax post-->
        <add name="Access-Control-Allow-Origin" value="http://localhost/ByAjaxClient" /> 
        <add name="Access-Control-Allow-Headers" value="origin, content-type" />
        </customHeaders>
    </httpProtocol>
</system.webServer>

留言