我正在尝试在 javascript / Jquery 中调用 asp.net webservice, 我尝试了很多例子,但不幸的是没有成功,
这是我目前正在尝试的代码,
login("[email protected]", "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());
});
}
请帮帮我, 预先感谢。
存在多个问题:
Access-Control-Allow-Origin: *
或特别允许您的源GET
,而您应该使用 POST
,因为在 SOAP over HTTP 中,信封必须位于请求正文中。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.
login("[email protected]", "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: "POST",
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());
});
}
只需添加 http://m.allaccesstnt.com/AATnTWebservices/Webservices/Userwebservice.asmx/test & 在网络服务器端添加标头