Вызов веб-службы с использованием jQuery для возврата простого логического значения - PullRequest
1 голос
/ 16 марта 2012

У меня есть приложение ASP.NET Web Forms, и на одной из моих страниц .ASPX у меня есть некоторый javascript.

В одной части Javascript я хочу вызвать веб-сервис, чтобы я мог выполнитьсерверной функции и возвращает либо значение true, либо false, затем в javascript я могу выполнить одно из двух действий в зависимости от значения true или false.

Я раньше не делал никаких веб-сервисов, поэтому яя борюсь с получением простого значения обратно в JS.

Мой WebService (LoginCheck.asmx) в настоящее время выглядит примерно так:

[System.Web.Script.Services.ScriptService]
public class LoginCheck : System.Web.Services.WebService
{
    [WebMethod]
    public bool IsLoggedIn()
    {
        return UserService.IsAuthenticated();
    }
}

Мой вызов Javascript в настоящее время выглядит примерно так:

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "LoginCheck.asmx/IsLoggedIn",
    data: "{}",
    dataType: "json",
    success: function (response) {
        if (response) {
            alert('Logged in: true');
        } else {
            alert('Logged in: false');
        }
    }
});

Несмотря на наличие точки останова в моем коде при использовании метода веб-службы IsLoggedIn, он никогда не прерывается.Я проверил «консоль» в Google Chrome, когда должен вызываться веб-сервис, и он говорит что-то вроде:

«Поддерживаются следующие операции ...», и он показывает мойМетод «IsLoggedIn», но весь контент, отображаемый в этом окне консоли, по сути является HTML-страницей с разметкой HTML.

Мне кажется, что я никогда не нарушал точку останова в коде или б) не получалответ на мой javascript (следовательно, ни одно из js-предупреждений, показанных в моем коде выше, не происходит).

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

он получает перенаправление 301 обратно на LoginCheck.asmx

У меня сегодня такая же проблема.

Возможно, вы используете LowerCaseRule в модуле URLRewrite 2 для IIS. Ваше имя метода - IsLoggedIn, поэтому LowerCaseRule пытается вызвать isloggedin, что не удается.

Ваш LowerCaseRule должен игнорировать файлы asmx, например:

        <rule name="LowerCaseRule1" stopProcessing="true">
            <match url="[A-Z]" ignoreCase="false" />
            <conditions>
                <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/>
            </conditions>
            <action type="Redirect" url="{ToLower:{URL}}" />
        </rule>

Редактировать : Я подвел итог сегодняшнему опыту и разместил его здесь: http://www.tomot.de/en-us/article/8/asp.net/how-to-use-jquery-to-call-a-webservice-asmx-method

2 голосов
/ 16 марта 2012

Вы должны отправить свой запрос и не отправлять пустые данные:

$.ajax({
    type: "POST", // CHANGED
    contentType: "application/json; charset=utf-8",
    url: "LoginCheck.asmx/IsLoggedIn",
    //data: "{}", REMOVED
    //dataType: "json", REMOVED, NOT NEEDED
    success: function (response) {
        if (response.d) { // CHANGED
            alert('Logged in: true');
        } else {
            alert('Logged in: false');
        }
    }
});

Затем вы получаете объект response со свойствами того, что возвращает ваш метод.

Если это bool, это будет выглядеть так:

Object
d: true

Так что в response.d у вас есть bool для продолжения.

...