当前位置: 首页 > 面试题库 >

使用jQuery将DataTable传递给Json

万俟光临
2023-03-14
问题内容

我正在尝试执行一个Web服务,该服务返回带有以下代码的DataTable:

$.ajax({  
    type: "POST",  
    url: url,  
    data: data,   
    contentType: "application/json; charset=utf-8",  
    dataType: "json",  
    success: function(msg) {  
        //do things  
        }  
    });

如果Web服务返回一个类,则它将起作用,因此它与输入参数等无关。仅当Web方法返回一个数据表(该数据表仅包含2列和2行用于我正在执行的测试)时,它才会失败。

WebService类装饰有[ScriptService]属性,因此我认为ASP.NET将自动将返回值序列化为JSON。它似乎不适用于数据表。

我发现的唯一解决方案是返回一个字符串(一个手动JSON序列化对象),但这样做对我来说似乎不合适。
我正在将Visual Studio 2008与.Net 3.5一起使用


问题答案:

最后,我决定使用JavaScriptSerializer类将DataTable转换为JSON字符串。不幸的是,该类不适用于DataTable,因此我将DataTable转换为字典列表,并将该列表传递给JavaScriptSerializer类。它只需要几行代码,就可以正常工作。
VB.net中的示例:

    Public Function GetJson(ByVal dt As DataTable) As String

        Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim rows As New List(Of Dictionary(Of String, Object))
        Dim row As Dictionary(Of String, Object)

        For Each dr As DataRow In dt.Rows
            row = New Dictionary(Of String, Object)
            For Each col As DataColumn In dt.Columns
                row.Add(col.ColumnName, dr(col))
            Next
            rows.Add(row)
        Next
        Return serializer.Serialize(rows)
    End Function


 类似资料:
  • 问题内容: 我有一个简单的web方法和ajax调用,并继续收到一个错误,说它无法将字符串转换为IDictionary对象? 这是ajax调用: 这是webMethod: 这是我从FireBug中看到的内容: 响应标头 服务器:Microsoft-IIS / 5.1 日期:2009年4月9日,星期四,格林尼治标准时间 jsonerror:true 缓存控制:私有 内容类型:application /

  • 问题内容: 好的,希望你们也能帮助我。我对jQuery和AJAX并不了解,也许我错过了一些非常简单的东西。我不能传递多个变量。 jQuery 因此,基本上,如果我运行此程序,它将运行正常,并且我的PHP脚本将对其进行处理。请注意,当我启用警报并显示加载的数据时,它会显示正确的信息(来自的信息),并且能够更新数据库。但是,一旦我添加了另一个变量,它就不会显示在警报框中加载的数据(如果我尝试显示来自两

  • 问题内容: 我有以下内容,但它不起作用,我在stackoverflow上的某个地方读到了它的工作原理,但我似乎无法使其工作..它出错了……我在做错什么吗? 如果我确实传递了这样的数据-它可以工作-所以我知道我的服务正在工作 问题答案: 我相信代码将在对象上调用.value或.toString(),然后通过网络传递。您想传递JSON。 因此,包括JSON JavaScript库 http://www

  • 问题内容: 我有一个简单的跨度 此范围在表内,每行都有一个删除范围。 然后,当单击该跨度时,我使用AJAX调用URL。AJAX事件需要知道该行的对象ID吗?使该ID进入点击功能的最佳方法是什么? 我以为我可以做这样的事情 但是ID不能以数字开头吗?对?那我以为我可以 然后从ID中删除“我的”部分,但这似乎很Yu! 以下是我的点击事件以及我的AJAX事件所在的位置。 我确定有一个不错的方法吗? 注意

  • 问题内容: 我有以下jQuery代码在aspx页面中调用webmethod 这是网络方法签名 这很好。 但是现在我需要将两个参数传递给Web方法 新的网络方法如下所示 如何更改客户端代码以成功调用此新方法签名? 编辑: 以下2种语法有效 和 其中filter和locale是局部变量 问题答案: 不要使用字符串串联来传递参数,只需使用数据哈希即可: 更新: 正如@Alex在注释部分所建议的那样,AS

  • 问题内容: 我正在尝试使用JQuery Ajax将表单的数据传递到我的控制器方法,但是由于在Controller Side上使用调试器时ViewModel为null,因此我不确定如何执行此操作。 我的ViewModel是: 前提是我数据库中的实体/表。 该表单包含“前提”表中的字段。 在我的javascript函数中,我这样做: 但是,当我在方法中检查viewModel参数时,它为null: 关于