使用jQuery调用Web Service以返回简单的布尔值

时间:2012-03-16 09:24:50

标签: jquery asp.net ajax web-services asmx

我有一个ASP.NET Web窗体应用程序,在我的一个.ASPX页面上,我有一些javascript。

在Javascript的一部分中,我想调用一个Web服务,这样我就可以执行服务器端函数并返回true或false值,然后在javascript中我可以执行两个操作中的一个,具体取决于true或错误的价值。

之前我没有做任何网络服务,因此我很难将简单的价值回馈给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'网络服务方法的代码中有一个断点,但它永远不会破坏它。我应该在调用Web服务时检查谷歌浏览器中的“控制台”,它说的是:

“支持以下操作...”,它显示了我的一个'IsLoggedIn'方法,但在此控制台窗口中呈现的所有内容本质上都是一个HTML页面,带有HTML标记。

我似乎永远不会a)打破代码中的断点或b)获得回复我的javascript的响应(因此我的代码中没有显示的js警报正在发生)。

2 个答案:

答案 0 :(得分:3)

  

它正在获得301重定向回LoginCheck.asmx

我今天遇到了同样的问题。

您可能在IIS的URLRewrite 2模块中使用LowerCaseRule。 您的方法名称为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

答案 1 :(得分:2)

您必须发送请求并且不发送空数据:

$.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中你可以继续你的布尔。