如何在javascript或Jquery中调用SOAP(XML)Web服务?
我试图在javascript/Jquery中调用asp.net webservice, 我尝试了这么多的例子,但不幸的是没有成功 这是我目前正在尝试的代码如何在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
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)头
或特别允许您的源,否则请求将无法工作访问控制允许源:
- 您使用的是
where,正如您应该使用的GET
,因为在soapoverhttp中,信封必须在请求主体中POST
- jQuery总是认为您的数据是
,除非将application/x-www-form-urlencoded
设置为false。只有设置processData
才会使标题变为谎言,实际上不会改变这一点。实际上,如果contentType
参数是字符串,则情况并非如此数据
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)头
或特别允许您的源,否则请求将无法工作访问控制允许源:
- 您使用的是
where,正如您应该使用的GET
,因为在soapoverhttp中,信封必须在请求主体中POST
- jQuery总是认为您的数据是
,除非将application/x-www-form-urlencoded
设置为false。只有设置processData
才会使标题变为谎言,实际上不会改变这一点。实际上,如果contentType
参数是字符串,则情况并非如此数据
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考虑答案。您可以通过单击我答案左侧的白色复选标记来执行此操作。