如何在javascript或Jquery中调用SOAP(XML)Web服务?

如何在javascript或Jquery中调用SOAP(XML)Web服务?,javascript,jquery,Javascript,Jquery,我试图在javascript/Jquery中调用asp.net webservice, 我尝试了这么多的例子,但不幸的是没有成功 这是我目前正在尝试的代码 login("abc@gmail.com", "123456"); var productServiceUrl = 'http://localhost:50575/Service1.asmx?op=test'; // Preferably write this out from server side functio

我试图在javascript/Jquery中调用asp.net webservice, 我尝试了这么多的例子,但不幸的是没有成功

这是我目前正在尝试的代码

    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());
    });
    }
登录(“abc@gmail.com", "123456");
var productServiceUrl=http://localhost:50575/Service1.asmx?op=test'; // 最好从服务器端写出来
功能登录(电子邮件、密码){
var soapMessage=\
\
\
“+电子邮件+”\
“+密码+”\
\
\
';
$.ajax({
url:productServiceUrl,
键入:“获取”,
数据类型:“xml”,
数据:soapMessage,
完成:endSaveProduct,
错误:函数(a、b、c){
警报(a+“\n”+b+“\n”+c);
},
contentType:“text/xml;字符集=\“utf-8”
});
返回false;
}
函数endSaveProduct(xmlHttpRequest,状态){
$(xmlHttpRequest.responseXML)
.find('loginResult')
.每个(功能){
警报($(this.find('Message').text());
});
}
请帮帮我,
提前感谢。

有多个问题:

  • 您正在向不同的域发送请求,因此除非该域发送跨源资源共享(CORS)头
    访问控制允许源:
    或特别允许您的源,否则请求将无法工作
  • 您使用的是
    GET
    where,正如您应该使用的
    POST
    ,因为在soapoverhttp中,信封必须在请求主体中
  • jQuery总是认为您的数据是
    application/x-www-form-urlencoded
    ,除非将
    processData
    设置为false。只有设置
    contentType
    才会使标题变为谎言,实际上不会改变这一点。实际上,如果
    数据
    参数是字符串,则情况并非如此
您的目标域似乎不允许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

});
第二个问题是:

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

存在多个问题:

  • 您正在向不同的域发送请求,因此除非该域发送跨源资源共享(CORS)头
    访问控制允许源:
    或特别允许您的源,否则请求将无法工作
  • 您使用的是
    GET
    where,正如您应该使用的
    POST
    ,因为在soapoverhttp中,信封必须在请求主体中
  • jQuery总是认为您的数据是
    application/x-www-form-urlencoded
    ,除非将
    processData
    设置为false。只有设置
    contentType
    才会使标题变为谎言,实际上不会改变这一点。实际上,如果
    数据
    参数是字符串,则情况并非如此
您的目标域似乎不允许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

});
第二个问题是:

XMLHttpRequest cannot load http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.
只需添加测试 & 在web服务器端添加标题

只需添加测试 &
在web服务器端添加标题

那么您有什么解决方案吗?兄弟?您的意思是什么?我只是说这是不可能的,因为同源安全政策。服务器必须允许它带有一个我无法控制的标头。@ SoHaulaHaad考虑答案。你可以点击我答案左边的白色复选标记。那么你有什么解决方案吗,兄弟?你是什么意思?我只是说这是不可能的,因为同源安全政策。服务器必须允许它带有一个我无法控制的标头。@ SoHaulaHaad考虑答案。您可以通过单击我答案左侧的白色复选标记来执行此操作。