0

javascript /Jqueryでasp.netWebサービスを呼び出そうとしています。多くの例を試しましたが、残念ながら成功しませんでした。

これが現在私が試しているコードです、

    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());
    });
    }

助けてください、よろしくお願いします。

4

2 に答える 2

4

複数の問題があります。

  • 別のドメインにリクエストを送信しているため、そのドメインがクロスオリジン リソース シェアリング (CORS) ヘッダーを送信しているAccess-Control-Allow-Origin: *か、オリジンを明確に許可していない限り、リクエストは機能しません。
  • SOAP over HTTP では、エンベロープが要求本文に含まれている必要があるため、GETwhere を使用する必要があります。POST
  • jQuery は、falseapplication/x-www-form-urlencodedに設定しない限り、常にデータが正しいと見なします。processData設定のみ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)

2番目の問題は次のとおりです。

XMLHttpRequest cannot load http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.
于 2012-08-05T11:46:04.077 に答える
-1

http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx/ test を追加し、Web サーバー側でヘッダーを追加するだけです

于 2013-12-25T18:40:52.450 に答える