jQuery Междоменный вызов вызова веб-службы asmx возвращает результаты, но jQuery показывает это как ошибку
Я вызываю через jQuery веб-службу asmx с поддержкой AJAX, размещенную на удаленном веб-сайте ASP.Net.
JQuery находится на странице, размещенной на моем локальном сайте ASP.Net.
Проблема заключается в том, что jQuery показывает ошибку (т. Е. Обратный вызов с ошибкой), когда выполняется вышеуказанный вызов, даже если я проверяю ответ в Fiddler, ошибки нет, но правильное ожидаемое значение от веб-службы. Правильным возвращаемым значением является "true", которое возвращается, как видно из Fiddler. Я не могу понять, чего мне не хватает в моем междоменном вызове.
Код jQuery для вызова службы Cross Domain asmx
var userName = 'mike';
var password = 'abcd';
var serviceurl = "http://www.kandoodev.com/WebService1.asmx/LoginUser";
$.ajax({
url: serviceurl,
type: 'GET',
crossDomain: true,
contentType: "application/json; charset=utf-8",
data:{ userName: userName, password: password },
dataType: "jsonp",
success: function (msg) {
alert('Cross-Domain Web service call succeeded. We will now call a protected method on the web service. ' + JSON.stringify(msg));
if (msg.toString() === 'true') {
alert('Valid Credentials');
}
else {
alert('Invalid Credentials');
}
},
error: function (error) { alert('ERROR has occurred!'); alert(JSON.stringify(error)) }
});
WebService1.asmx
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the
//following line.
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
[PrincipalPermission(SecurityAction.Assert, Unrestricted = true)]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public bool LoginUser(string userName, string password)
{
bool authenticated = false;
if (userName.ToLower() == "mike" && password.ToLower() == "abcd")//you can instead check credentials against a users table in database
{
authenticated = true;
}
return authenticated;
}
}
Значения в обратном вызове ошибки приведены ниже:
TextView в Fiddler of Response, как показано ниже.
<?xml version="1.0" encoding="utf-8"?>
<boolean xmlns="http://tempuri.org/">true</boolean>
1 ответ
Вы проверили, возвращает ли запрос предварительной проверки (т.е. запрос опции) веб-серверу заголовки Access-Control-Allow-Origin:* (или разрешенное имя домена) и Access-Control-Allow-Methods: GET, POST (или любой другой глаголы) в ответе. Потому что есть случаи, когда предварительный запрос возвращает 200 OK, но пропускает заголовки CORS.