如何在没有参数的页面加载中从jquery调用页面方法?

时间:2012-08-08 20:15:27

标签: jquery asp.net ajax webmethod

我只需要在页面加载完成后运行一个方法。

这是我正在使用的js:

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax({
            type: "GET",
            url: document.URL + "/LoadAssignees"
        });
    });
</script>

这是我试图运行的方法:

[WebMethod()]
protected void LoadAssignees()
{
    //load assignees
    var sw = Stopwatch.StartNew();
    sw.Start();
    cboAssignees.DataSource = Uti.GetAssigneeList(_currentUser, 1, false);
    sw.Stop();
    cboAssignees.DataTextField = "Name";
    cboAssignees.DataValueField = "Guid";
    cboAssignees.DataBind();

    Response.Write(string.Format("Assignee load time: {0}", sw.ElapsedMilliseconds));
}

我觉得我做得对。我没有收到任何错误,但什么也没发生。我在方法上设置了一个断点,它没有被击中,所以我猜我的ajax调用是不正确的。我错过了什么?

另一方面,我正在尝试做的是在页面完成渲染后异步运行一个方法。如果你能提出一个更好的方法来实现这一点,那对我也有用:)谢谢。

2 个答案:

答案 0 :(得分:1)

Sinaesthetic,

您需要在$.ajax()函数调用中处理响应。在您的情况下,我将使用您在jquery.com上的jQuery.ajax()描述中描述的“success”参数。

这是因为你的代码中的Response.Write方法不会写回你调用它的页面,而是回写到ajax函数本身。如果没有处理该回复,则什么也得不到。

所以,例如:

    $.ajax({
        type: "GET",
        url: document.URL + "/LoadAssignees",
        success: function(data) {
            alert(data);
        }
    });

修改

您也可以尝试使用其他方法在Ajax调用中为您的Web方法设置URL:如果您的网页的网址为http://mydomain.com/dir1/pagex.aspx,那么您的ajax将尝试联系http://mydomain.com/dir1/pagex.aspx/LoadAssignees

希望有所帮助!

  • 马特

答案 1 :(得分:1)

是的,看起来你的访问修饰符限制太多了:

  

具有此属性集的类中的方法称为XML Web   服务方式。方法和类必须是公共的并且正在运行   在ASP.NET Web应用程序中。

这是来自“备注”部分:http://msdn.microsoft.com/en-us/library/system.web.services.webmethodattribute.aspx