2

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

这是我正在使用的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 调用不正确。我错过了什么?

附带说明一下,我要做的是在页面完成渲染后立即异步运行一个方法。如果您能提出更好的方法来实现这一点,那也对我有用:) 谢谢。

4

2 回答 2

1

感觉,

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

这是因为后面代码中的 Response.Write 方法不会写回调用它的页面,而是写回 ajax 函数本身。如果没有处理该响应,您将一无所获。

因此,例如:

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

编辑

您还应该尝试在 Ajax 调用中为您的 web 方法设置 URL 的不同方法:如果您的页面的 url 是http://mydomain.com/dir1/pagex.aspx,那么您的 ajax 将尝试联系http://mydomain.com/dir1/pagex.aspx/LoadAssignees

希望有帮助!

  • 马特
于 2012-08-08T20:22:41.720 回答
1

是的,看起来你的访问修饰符太严格了:

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

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

于 2012-08-08T20:23:29.667 回答