如何从webmethod到jquery获取数组值以供显示?

时间:2015-08-26 09:53:49

标签: c# jquery json

我想在一段时间间隔内显示来自数据库的数据,所以我使用了Timer控件,但是在每次打勾时,div(聊天框)最小化,所以我想避免在每个帖子上最小化我使用Jquery来webmethode概念如下。

调用C#数组类型webmethod。

<script type="text/javascript">
        $(document).ready(function () {           
            $("#tblCustomers tbody tr").remove();
            $.ajax({
                type: "POST",
                url: "GetDataByJquery.aspx/GetMessages",
                data: '{roomId: "' + $("[id$=lblRoomId]").html() + '" }',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    response($.map(data.d, function (item) {
                        var rows = "<tr>"
                    + "<td class='customertd'>" + item.Username + "</td>"
                    + "<td class='customertd'>" + item.Sex + "</td>"
                    + "<td class='customertd'>" + item.Text + "</td>"
                    + "<td class='customertd'>" + item.TimeStamp + "</td>"
                    + "<td class='customertd'>" + item.UserID + "</td>"
                    + "</tr>";
                        $('#tblCustomers tbody').append(rows);
                    }))
                },
                failure: function (response) {
                    alert(response.d);
                }
            });
        });    
    </script>

从sqlserver获取数据并在数组中重新导入。

    public static Messages[] GetMessages(string roomId)
    {
        List<Messages> messages = new List<Messages>();           
        string strConnString = ConfigurationManager.ConnectionStrings["LinqChatConnectionString"].ConnectionString;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                string query = "[Get_Messages]";
                SqlCommand cmd = new SqlCommand(query);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@roomId", roomId);
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Messages message = new Messages();
                    message.Username = reader.GetString(0);
                    message.Sex = reader.GetString(1);
                    message.Text = reader.GetString(2);
                    message.TimeStamp = reader.GetDateTime(3);
                    message.UserID = reader.GetInt32(4);
                    messages.Add(message);
                }
            }
        }
        return messages.ToArray();
    }

但是我无法显示数据..那么如何显示它?

3 个答案:

答案 0 :(得分:2)

使用Newtonsoft.Json将Object序列化为JSON。

将响应内容类型设置为application / json并序列化结果对象并将其返回。

    HttpContext.Current.Response.ContentType = "application/json";
    var result= JsonConvert.SerializeObject(messages);
    return result;

安装Newtonsoft.Json

右键单击解决方案资源管理器中的参考文件夹,然后选择“管理Nuget包”,将出现一个向导。

在搜索框中编写Newtonsoft,它将在顶部显示Json.Net。

单击“安装”,安装需要几秒钟。

答案 1 :(得分:0)

您还可以使用JsonResult作为下面的代码,以便返回序列化对象。

    [WebMethod]
    public JsonResult testmethod()
    {
        List<YourObject> objectlist = new List<YourObject>();
        JsonResult result = new JsonResult();
        result.Data = objectlist;
        return result;
    }

答案 2 :(得分:0)

问题与WebMethod无关,当数据返回客户端时,即$ .ajax,成功回调,您没有正确使用$.map函数,并且您还使用了未定义的方法response(这您的代码中不存在方法),这会导致JS错误并且不会显示数据。

所以改变代码

success: function (data) {
   response($.map(data.d, function (item) {
      var rows = "<tr>"
      + "<td class='customertd'>" + item.Username + "</td>"
      + "<td class='customertd'>" + item.Sex + "</td>"
      + "<td class='customertd'>" + item.Text + "</td>"
      + "<td class='customertd'>" + item.TimeStamp + "</td>"
      + "<td class='customertd'>" + item.UserID + "</td>"
      + "</tr>";
      $('#tblCustomers tbody').append(rows);
     }))
  }

success: function (data) {
   var rows = $.map(data.d, function (item) {
      return "<tr>"
      + "<td class='customertd'>" + item.Username + "</td>"
      + "<td class='customertd'>" + item.Sex + "</td>"
      + "<td class='customertd'>" + item.Text + "</td>"
      + "<td class='customertd'>" + item.TimeStamp + "</td>"
      + "<td class='customertd'>" + item.UserID + "</td>"
      + "</tr>";
    });
    $('#tblCustomers tbody').append(rows);
 }

此代码的说明:

$.map函数用于将集合转换为另一个集合。 所以我们正在研究data.d并且对于每次迭代,我们将对象转换为包含行的html并返回$ .map函数体中的html tr行,并且我们将所有返回的tr html存储在局部变量中“var rows = ...”。

因此,当$.map退出时,我们将在变量行中转换所有变换的tr html,并且我们可以将其附加到表的tbody中,这会导致数据以表格格式显示。