Jquery datatable 在从简单的 Web 服务调用 Web 方法时未在表中显示任何数据

Posted

技术标签:

【中文标题】Jquery datatable 在从简单的 Web 服务调用 Web 方法时未在表中显示任何数据【英文标题】:Jquery datatable Is showing no data in table on calling a web method from a simple web service 【发布时间】:2017-08-21 05:50:43 【问题描述】:

在调用一个简单的 Web 服务方法时,我在表中没有得到任何数据。我试图使用 datatble 插件将服务器端返回的数据放入 jquery 数据表中。但它没有给我表格标题的表格中的数据。 webservice 方法正在返回 Json 数据,但还添加了一个字符串标签,所以我不确定它是否完全是 Json。可能这可能是问题。我对此很陌生,一直在服务器端工作。在我的工作中,我经常处理 C# 数据表,所以我只需要序列化数据表,而且大多数时候我什至不确定哪个数据库将要返回的列 所以我不能使用任何代表表结构的类文件。有没有办法解决这个问题??非常感谢任何帮助。

<script src="Scripts/jquery-3.1.1.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css" />
<script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () 
        $.ajax(
            url: 'UserService.asmx/UserDetails',
            contentType: "application/json; charset=utf-8",
            method: 'post',
            datatype: 'json',
            success: function (data) 
                $('#tbl').dataTable(
                    data: data,
                    columns: [
                     'data': 'UserId' ,
                     'data': 'UserName' ,
                     'data': 'UserPassword' ,
                     'data': 'RoleId' ,
                     'data': 'Gender' ,
                     'data': 'EmailId' ,
                     'data': 'DateOfBirth' ,
                     'data': 'Address' ,
                    ]
                );
            ,
            error: function() 
            alert('Fail!');
        
        );
    );
</script>

而我的服务器端网络服务代码是

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string UserDetails()
    
        DataTable dt = new DataTable();
        dt.TableName = "UserDetails";
        SqlConnection conn;
        SqlCommand cmd;
        string connection = ConfigurationManager.ConnectionStrings["Connstr"].ToString();
        string command = "SELECT * FROM tbl_User";
        using (conn = new SqlConnection(connection))
        
            cmd = new SqlCommand(command, conn);
            cmd.CommandType = CommandType.Text;
            conn.Open();
            cmd.ExecuteNonQuery();
            SqlDataAdapter da = new SqlDataAdapter(command, conn);
            da.Fill(dt);
            conn.Close();
                        
            var js = DataTableToJSONWithJavaScriptSerializer(dt);
        return js;
    

    public string DataTableToJSONWithJavaScriptSerializer(DataTable dt)
        
        JavaScriptSerializer js = new JavaScriptSerializer();
        List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>();
        Dictionary<string, object> childRow;
            foreach (DataRow row in dt.Rows)
            
                childRow = new Dictionary<string, object>();
                foreach (DataColumn col in dt.Columns)
                
                    childRow.Add(col.ColumnName, row[col]);
                
                parentRow.Add(childRow);
            
        return js.Serialize(parentRow);
        

webservice方法的输出格式如下。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<string xmlns="http://tempuri.org/">
["UserId":"XYZ","UserName":"XYX","UserPassword":"XYX@1234","RoleId":1,"Gender":"F","EmailId":"XYX@email.com","DateOfBirth":"\/Date(623874600000)\/","Address":"ABC Str. 57",
"UserId":"ANATR","UserName":"ANT","UserPassword":"ABC@1234","RoleId":1,"Gender":"F","EmailId":"ANT@email.com","DateOfBirth":"\/Date(-301815000000)\/","Address":"XYZ. 2222",
"UserId":"WOLZA","UserName":"DIS","UserPassword":"AB@1234","RoleId":2,"Gender":"M","EmailId":"DIV@email.com","DateOfBirth":"\/Date(379362600000)\/","Address":"ul. JUMP 68"]
</string>

【问题讨论】:

我认为数据表需要没有 xml 包装器的纯 json 没有 XML Wrapper 有什么办法可以得到它吗?我需要序列化查询返回的数据表 【参考方案1】:

我觉得

How to convert datatable to json string using json.net?可以帮你,序列化后,成功回调使用jquery.parsejson

【讨论】:

你试过后发生了什么,你得到了正确的 json 吗? 它给了我空白屏幕。没有输出数据 你追踪过数据吗,可能是null或者使用jquery数据表有问题。 我能够通过将 Web 方法的返回类型更改为 VOID 而不是字符串来获取纯 JSON 数据。不知道它做了什么,但解决了这个问题。但是现在 Jquery ajax 总是会出错而不是成功。但是 Web 服务正在返回 JSON。 您可以添加错误回调并查看您遇到的错误错误: function (xhr, ajaxOptions, throwedError) alert( xhr.responseText); 【参考方案2】:

尝试:

     success: function (data) 
         var d = JSON.parse(data.d);

            $('#tbl').dataTable(data:d, 

等等。

【讨论】:

以上是关于Jquery datatable 在从简单的 Web 服务调用 Web 方法时未在表中显示任何数据的主要内容,如果未能解决你的问题,请参考以下文章

将数据从简单的 NSView 传递到 SwiftUI 视图

从简单的 XML 文件中提取数据

从简单的 python 列表创建图像和标签的 tensorflow 数据集

无法从简单的 Ajax 函数调用 Spring Boot RestController 中的 GET 方法

从简单的按键消抖开始

PowerShell 从简单的 .ini 文件中读取单个值