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.

Другие вопросы по тегам