簡體   English   中英

如何在JavaScript或Jquery中調用SOAP(XML)Web服務?

[英]How to call SOAP (XML) webservice in javascript or Jquery?

我試圖在javascript / Jquery中調用asp.net網絡服務,我嘗試了很多示例,但不幸的是沒有成功,

這是我目前正在嘗試的代碼,

    login("abc@gmail.com", "123456");
    var productServiceUrl = 'http://localhost:50575/Service1.asmx?op=test'; // Preferably write this out from server side

    function login(Email, Password) {
        var soapMessage = '<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:Body> \
<login xmlns="http://test.com/"> \
<Email>' + Email + '</Email> \
<Password>' + Password + '</Password> \
</login> \
</soap:Body> \
</soap:Envelope>';

        $.ajax({
            url: productServiceUrl,
            type: "GET",
            dataType: "xml",
            data: soapMessage,
            complete: endSaveProduct,
            error: function (a, b, c) {
                alert(a + "\n"  + b + "\n" + c);
            },
            contentType: "text/xml; charset=\"utf-8\""
        });

        return false;
    }

    function endSaveProduct(xmlHttpRequest, status) {
        $(xmlHttpRequest.responseXML)
    .find('loginResult')
    .each(function () {
        alert( $(this).find('Message').text());
    });
    }

請幫幫我,謝謝。

存在多個問題:

  • 您正在將請求發送到其他域,因此除非該域發送跨域資源共享(CORS)標頭Access-Control-Allow-Origin: *或明確允許您的來源,否則該請求將不起作用
  • 您正在使用GET ,而應該使用POST ,因為在基於HTTP的SOAP中,信封必須位於請求正文中。
  • jQuery始終認為您的數據是application/x-www-form-urlencoded除非您將processData設置為false。 僅設置contentType只會使標頭撒謊,並且實際上不會更改此標頭。 實際上,如果data參數是一個字符串,則不是這樣。

您的目標域似乎不允許使用CORS,因此不可能直接從客戶端進行。 您必須使用服務器代理來執行請求。

如果他們允許CORS,您可以這樣做:

var soapMessage = '<?xml version="1.0" encoding="utf-8"?>\
                    <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">\
                      <soap12:Body>\
                        <login xmlns="http://tastygo.com/">\
                          <BBMID>string</BBMID>\
                          <Email>string</Email>\
                          <Password>string</Password>\
                        </login>\
                      </soap12:Body>\
                    </soap12:Envelope>';

$.ajax( "http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx", {

    contentType: "application/soap+xml; charset=utf-8",
    type: "POST", //important
    dataType: "xml",
    data: soapMessage

});

但這將不起作用,因為服務器不允許使用OPTIONS,瀏覽器必須使用OPTIONS來確定是否允許跨域請求:

OPTIONS http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx 405 (Method Not Allowed)

第二個問題是:

XMLHttpRequest cannot load http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.

只需添加http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx/ 測試並在Web服務器端添加標頭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM