【问题标题】:using jquery/ajax/webmethod to update a listbox使用 jquery/ajax/webmethod 更新列表框
【发布时间】:2012-04-03 13:12:14
【问题描述】:

我有一个列表框,我想通过使用 jquery/ajax 从代码隐藏页面调用 webmethod 来更新它。列表框显示所有已登录的用户(成功登录后将它们添加到全局列表中)。我显然可以使用整页刷新来更新列表框,但这并不美观。我有两个问题。

  1. 当我在 chrome 中运行应用程序并通过开发工具检查网络活动时,我看不到 web 方法被调用。我有其他网络方法(我可以看到)正在按预期被解雇/执行。

  2. 我根据我找到的示例编写脚本,所以我不完全确定(我对这些领域相对较新)如果我 (a) 从列表中正确获取数据(我只是希望显示用户名)和(b)将其正确附加到列表框。

这是网络方法:

[WebMethod()]
    public static string[] getCurrentList()
    {
        int count = 0; 
        for(int i = 0; i < Global.ListUsers.Count(); i++)
            count++;

        string[] results = new string[count];

        for (int i = 0; i < count; i++)
        {
            results[i] = Global.ListUsers[i].Username.ToString();**//edited...** 
        }                                            

        return results;
    }

和脚本:

$(function updateListbox() {
var lBox = $('select[id$=ListBox1]');
setInterval(function () {
    $.ajax({
        beforeSend: function (req) {
            req.setRequestHeader("Accept", "application/json");
        },
        type: "POST",
        url: "Homepage.aspx/getCurrentList",
        data: "json=" + JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var results = data.d;
            if (results.length > 0) {
                var updatedList = [];
                for (var i in results) {
                    updatedList.push(results[i]);
                }
                $(lBox).append(updatedList.join('\n'));
            }
            else alert("No new items to update...");
        }
    });
}, 5000);

});

欢迎和赞赏所有帮助和建议

【问题讨论】:

    标签: jquery asp.net ajax webmethod


    【解决方案1】:

    除非您将参数传递给函数,否则您不需要数据字段中的任何内容。只需将该字段排除在外,它应该可以正常工作。

    我也从来不需要使用 beforeSend 参数,但您的情况可能会略有不同。

    【讨论】:

    • 感谢您澄清这一点,我实际上并不知道数据字段的用途。但是,我在数据字段中出现的原因是因为我从 chrome 中的开发人员工具中收到服务器 500 错误,经过搜索,这是我找到的解决方案 - 它停止了错误,但我看不到如上所述调用 webmethod。我有另一个 webmethod queryInvitedBy,我可以看到每 5 秒调用一次(如预期的那样),所以我不知道为什么我看不到 getCurrentList 被调用。
    • 我取出了数据字段中的内容;我现在可以看到 webmethod 正在触发,但我再次收到该错误:“500 内部服务器错误”。如果我查看对请求的预览/响应,我会看到:“对象引用未设置为对象的实例”。
    • 单步调试您的 C# 代码以查看究竟是什么引发了异常。您的第一个 for 循环缺少括号...
    • 语句后面的单行代码可以是内联的、带括号或不带括号的。我将在下面粘贴堆栈跟踪,因为此评论中没有足够的空间。
    • 对于数据部分,您应该可以使用data: "{}" - 阅读encosia.com/…
    【解决方案2】:

    实际上问题似乎是 AJAX 调用属性数据。请按如下方式修改数据属性:

    data: "{}",
    

    无需发送任何参数(“json=” + JSON.stringify(data)。您的 Web 方法不包含任何参数)。同样根据 servarevitas 的回答,不需要 beforeSend 参数,ajax 调用已经将内容类型指定为 Json。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2013-06-27
      • 2015-04-18
      相关资源
      最近更新 更多