6

我在页面的代码隐藏文件中创建了一个 WebMethod,如下所示:

[System.Web.Services.WebMethod()]
public static string Test()
{
    return "TEST";
}

我创建了以下 HTML 页面来测试它:

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"/></script>
    <script type="text/javascript">
        function test() {            
            $.ajax({
                type: "POST",
                url: "http://localhost/TestApp/TestPage.aspx/Test",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "text",
                success: function(msg) {
                    alert(msg.d);
                }
            });
        }
    </script>
</head>
<body>
    <button onclick="test();">Click Me</button>
</body>
</html>

当我单击该按钮时,AJAX 会触发,但没有返回任何内容。当我调试我的代码时,Test()甚至没有调用该方法。有任何想法吗?

4

5 回答 5

6

尝试

url: "TestPage.aspx/Test"

或将访问您的页面的任何相对 URL。

您可能无意中违反了同源政策

此外,虽然您还没有到那里,但您正在期待 ad: Wrapped object。因为它是你只会得到一个字符串。

这应该可以让您到达您想去的地方。

    function test() {            
        $.ajax({
            type: "POST",
            url: "TestPage.aspx/Test",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(msg) {
                alert(msg.d);
            }
        });
    }
于 2010-05-04T21:28:42.433 回答
2

I think datatype should be "json". Add an error function to see what error status you get back ie 404 not found , 500 server error etc etc

于 2010-05-04T21:34:05.773 回答
1

我使用 jQuery 制作了这个 javascript 函数来调用 WebMethods:

function pageMethod(fn, params, successFn, errorFn) {  
    var pagePath = window.location.pathname;  

    var jsonData = $.toJSON(params);

    $.ajax({  
        type: "POST",  
        url: pagePath + "/" + fn,  
        contentType: "application/json; charset=utf-8",  
        data: jsonData,  
        dataType: "json",  
        success: successFn,  
        error: errorFn  
    });
}

那个 $.toJson 序列化是通过 jquery.json-1.3 插件实现的。

如您所见,dataType 必须是“json”

于 2010-05-04T21:30:36.117 回答
0

您需要将 Test() 设置为接受/允许 POST

于 2010-05-04T21:07:16.963 回答
0

如果 PageMethods 在您的页面上正确注册,您应该能够使用 Microsoft 注册的称为 PageMethods 的对象调用它们。

您的 javascript 应该在 aspx 页面加载所有 Microsoft 特定库后运行。加载这些后,您可以这样调用 PageMethod:

PageMethods.Test(function() OnSucceeded{}, function() OnFailed{});

这是更好示例的链接:

http://www.junasoftware.com/blog/using-jquery-ajax-and-page-methods-with-a-asp.net-webservice.aspx

如果您还没有,我强烈建议您使用 Firebug 来帮助调试这些客户端调用。Firebug 将为您提供确定实际情况所需的所有信息。

getfirebug.com

于 2010-05-04T21:12:04.737 回答