5

长期在这里的 WinForm 程序员,但对 Web 编程场景很陌生。我有 Visual Studio 2010,并创建了一个新的网站项目。我似乎无法让 ajax 调用我创建的网络方法。当我点击页面上的按钮时,什么也没有发生。

当我创建一个网站项目时,看起来 jquery 1.4.1 会自动添加到 Scripts 文件夹中。

在 Default.aspx 中,我添加了 2 个脚本标签:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript" src="Scripts/Process.js">

我在 Process.js 中定义 onclick 函数的页面上放置了一个按钮:

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" />

在 Process.js 我有以下代码:

function btnTest_onclick() {

    var strData = JSON.stringify({
        userid: 5
    });

    alert(strData);

    $.ajax({
        url: 'Default.aspx/GetData',
        type: "POST",
        data: strData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: Success,
        failure: Failure,
        async: true
    });
}

function Success(data) {
    alert("success");
}

function Failure(data) {
    alert("failure");
}

在 Default.aspx.cs 中:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod()]
    public static string GetData(int id)
    {
        return "hello, my id is " + id;
    }
}
4

3 回答 3

5

我不知道您是否需要使用 JQuery 发出 Ajax 请求,但您可以更轻松地使用 ASP.NET ajax 的功能对页面方法进行 ajax 请求。

首先我要注意,要使用 PageMethods,您需要将脚本管理器控件添加到页面并指定 EnablePageMethods="True"。

当您这样做时,ScriptManager 将呈现 PageMethods 客户端定义,该定义代表页面上已定义页面方法的代理,您可以使用 Ajax 请求轻松调用此方法。

因此,您可以尝试以下代码:

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" />
<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" />
<script type="text/javascript">
    function btnTest_onclick() {

        PageMethods.GetData(5, Success, Failure);
    }

    function Success(data) {
        alert("success");
        alert(data);
    }

    function Failure(data) {
        alert("failure");
    }

</script>

如您所见,此代码的代码行数较少,并且可以正常工作。

于 2012-11-19T19:47:30.603 回答
1

数据项名称必须与页面方法参数匹配:

 var strData = JSON.stringify({
                id_MATCH: 5
            });

    [WebMethod()]
    public static string GetData(int id_MATCH)
    {
        return "hello, my id is " + id_MATCH;
    }
于 2012-11-16T21:53:16.140 回答
0

下面是 Ajax 帖子和处理的 web 方法

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" />
<script type="text/javascript" >
function btnTest_onclick() {

var strData = JSON.stringify({
    userid: 5
});

alert(strData);

$.ajax({
    url: 'Default.aspx/GetData',
    type: "POST",
    data: strData,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: Success,
    failure: Failure,
    async: true
});
}

function Success(data) {
alert("success");
}

function Failure(data) {
alert("failure");
}</script>

[System.Web.Services.WebMethod()]
    public static string GetData(int userid)
    {
        return "hello, my id is " + userid;
    } 

您能否检查上面的代码,其中从 $.ajax 发送的数据名称与 web 方法中的相同。

谢谢

于 2012-11-25T10:13:09.893 回答