【问题标题】:Get data from JSON to jqGrid从 JSON 获取数据到 jqGrid
【发布时间】:2014-07-08 23:56:06
【问题描述】:

我正在尝试从以下地址获取data

 jQuery(document).ready(function() {

 var mydata;
        $.getJSON('@Url.Action("GetJsonData", "Home")', function(data) {

            datatype: 'json',
                mydata = data;
            // alert(mydata);

        });

致我的jqGrid

        $("#grid").jqGrid({
            datastr: data,
            datatype: 'json',
            width: '100%',
            colNames: ["Seq ID", "Fund ID", "Name", "Fund", "Bonus", "Allocation", "Blank", "Begin", "End"],
            colModel: [
                {
                    name: 'seqid',
                    index: 'seqid',
                    editable: true,
                }, {
                    name: 'fund id',
                    index: 'fund id',
                    editable: true,
                }, {
                    name: 'name',
                    index: 'name',
                    editable: true,
                }, {
                    name: 'fund',
                    index: 'fund',
                    editable: true,
                }, {
                    name: 'bonus',
                    index: 'bonus',
                    editable: true,
                }, {
                    name: 'allocation',
                    index: 'allocation',
                    editable: true,
                }, {
                    name: 'blank',
                    index: 'blank',
                    editable: true,
                }, {
                    name: 'begin',
                    index: 'begin',
                    editable: true,
                }, {
                    name: 'end',
                    index: 'end',
                    editable: true,
                }
            ],


            pager: '#pager',
            'cellEdit': true,
            'cellsubmit': 'clientArray',
            editurl: 'clientArray'
        });

数据如下:

{
    "FUND_SEQ_ID": 1.0,
    "FUND_ID": 23,
    "FUND_NM": "INSTITUTIONAL",
    "FUND_TICKER_NM": "TINXX",
    "FUND_SALARY_IND": "A",
    "FUND_BONUS_IND": "N",
    "FUND_ALCTN_IND": "\u0000",    <- This should be null
    "BEG_DT": "20140101",
    "END_DT": "24000101"
  },

我试过了:datatype: jsonstringdatastr: datadata: data.. 什么都不给我,或者 p.colModel 为空或不是对象

getJSON 方法中的数据在那里。只是不知道如何通过它。

更新:这是我在 MVC 4 Razor 中使用 DataTable 的方法。

HomeController.cs我有一个方法:

    public string GetAssociateFromDb()
    {
        DataTable dt = new DataTable();
        string jsonData;
        string connString = ConfigurationManager.ConnectionStrings["DEFCOMP"].ConnectionString;
        using (SqlConnection connection = new SqlConnection())
        {
            connection.ConnectionString = connString;
            using (var cmd = new SqlCommand("SELECT * FROM FUND", connection))
            {
                connection.Open();
                SqlDataAdapter myAdapter = new SqlDataAdapter(cmd);
                myAdapter.Fill(dt);
                return JsonConvert.SerializeObject(dt); // Converted to JSON string
            }
        }

    }

在我看来 (Index.cshtml),我在 jQGridurl 中调用了该方法。

    $(document).ready(function() {


            jQuery("#grid").jqGrid({
                url: '@Url.Action("GetAssociateFromDb", "Home")',
                datatype: "json",
                width: '100%',
                colNames: ["Seq ID", "Fund ID", "Name", "Fund", "Salary", "Bonus", "Allocation", "Begin", "End"],
                colModel: [
                    { name: "FUND_SEQ_ID" },
                    { name: "FUND_ID" },
                    { name: "FUND_NM" },
                    { name: "FUND_TICKER_NM" },
                    { name: "FUND_SALARY_IND" },
                    { name: "FUND_BONUS_IND" },
                    { name: "FUND_ALCTN_IND" },
                    { name: "BEG_DT" },
                    { name: "END_DT" }
                ],
                cmTemplate: { editable: true },
            //    data: JSON.parse(data),  // Load Data
                rowNum: 10,        // Total records to show at a time by default
                loadonce: true,       
                rowList: [10, 20],  // For Paging
                pager: '#pager',
                jsonReader: {
                    repeatitems: false,
                    page: function () { return 1; },  // This was necessary.
                    root: function (obj) { return obj; },
                    records: function (obj) { return obj.length; }
                },
                viewrecords: true,
                gridview: true,
                autowidth: true,
                height: 'auto',
                hoverrows: true,
                caption: "List of Funds"
        });
    });

【问题讨论】:

  • 您在问题中包含的数据不是项目数组。您是否真的尝试以这种方式使用 jqGrid,或者您只是没有包含来自服务器的完整响应?为什么不使用url: '@Url.Action("GetJsonData", "Home")'datatype: "json"?这是填充网格数据的最标准方式。
  • 感谢@Oleg 的评论。我确实尝试过,但网格仍然是空的。
  • 数据实际上是一个数组。它看起来像提供的示例,但在 [ ] 中包含了 10 个额外的记录。

标签: jquery json jqgrid


【解决方案1】:

我看到的主要问题是列的命名与输入 JSON 数据中的不同。尝试将colModel 替换为以下内容:

colModel: [
    { name: "FUND_SEQ_ID" },
    { name: "FUND_ID" },
    { name: "FUND_NM" },
    { name: "FUND_TICKER_NM" },
    { name: "FUND_SALARY_IND" },
    { name: "FUND_BONUS_IND" },
    { name: "FUND_ALCTN_IND" },
    { name: "BEG_DT" },
    { name: "END_DT" }
],
cmTemplate: {editable: true},

cmTemplate 选项允许您在colModel 中设置common 属性。我建议您在所有网格中也使用gridview: trueautoencode: true

另外你可以使用

url: '@Url.Action("GetJsonData", "Home")',
datatype: "json",
loadonce: true

而不是使用$.getJSON

【讨论】:

  • 感谢您的回答。我完全按照你说的做了..但仍然没有数据?没有错误或任何东西,只是没有数据。
  • @MurDeR:不客气!我想您在代码中犯了一些错误。查看the demoanother one。第一个演示使用datatype: "jsonstring",第二个演示使用datatype: "json",并从服务器加载数据。两个演示都有效。您应该将演示的代码与您的代码进行比较,您应该会发现错误。
  • 再次感谢您的演示。我已经尝试过你的方法并且它有效。我认为我的问题是$("#grid").jqGrid({ url: '@Url.Action("GetJsonData", "Home")', datatype: "json", loadonce: true, ... 糟透了我不能使用alert(@Url.Action.....);
  • 我们可以在其他地方继续这个讨论吗?
  • @MurDeR:您必须将GetAssociateFromDB 中的return serializer.Serialize(rows); 替换为return rows;。问题是return Json(jsonData, JsonRequestBehavior.AllowGet); 进行 JSON 序列化。如果您序列化对象,那么反序列化的数据也将是客户端的对象。如果您对 string 进行 sertilize (就像您目前所做的那样),那么该字符串也将在客户端反序列化为字符串,并且处理将失败。所以当前的错误是在服务器代码中。您将在服务器响应中看到 \" 而不是 "
【解决方案2】:

根据@Oleg 所说,您应该删除jQuery(document).ready 上的函数并在jqGrid 上设置此选项:

$("#grid").jqGrid({
    url: '@Url.Action("GetJsonData", "Home")',
    datatype: "json",
    width: '100%',
    // and so on
...
});

【讨论】:

  • 查看我更新的代码here。它使 IE 崩溃。你看有什么不对吗?我按照你说的做了,我删除了url:并将数据类型更改为local
  • “导致 IE 崩溃”是什么意思?什么错误?
  • “停止运行此脚本?此页面上的脚本导致您的网络浏览器运行缓慢,如果继续运行,您的计算机可能会变得无响应。”
  • 它加载表,但没有数据。我更新了我的fiddle
【解决方案3】:

您的数据格式可以更改吗?最好的方法是根据需要从服务器获取它,例如:

  { 
  "totalpages": "xxx", 
  "currpage": "yyy",
  "totalrecords": "zzz",
  "invdata" : [
    {"id" :"1", "cell" :["1.0", "23", "INSTITUTIONAL MONEY MARKET FUND", ...]},
    {"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
      ...
  ]
}

如果你不能 - 你仍然可以将你的数据更改为一些“new_data”,这样它就会采用上述格式(取自jqgrid wiki1

如果您仍然选择保留您的代码 - 请考虑以下事项:

datastr - datatype 参数设置为 xmlstring 或 jsonstring 时的数据字符串

(取自jqgrid wiki2) 你的数据类型是'json' 希望对你有帮助..

【讨论】:

  • 好吧,我希望它是动态的(来自数据库/实时提要),这就是我不使用静态数据的原因。我确实尝试了datastr 方法,但不幸的是,它对我不起作用。加载的网格没有数据。
  • 谁谈过静态数据?当然你希望它被动态改变..那么为什么不使用'url'并从你的服务器获取上述格式呢? (如简单的演示示例)。我错过了什么?
  • 我不知道该怎么做。对不起。
【解决方案4】:
loadonce: true,
jsonReader: {
repeatitems: false,
root: function (obj) { return obj; },
page: function (obj) { return grid.jqGrid('getGridParam', 'page'); },
total: function (obj) { return Math.ceil(obj.length / 
grid.jqGrid('getGridParam', 'rowNum')); },
records: function (obj) { return obj.length; }
},

在你的 $("#grid").jqGrid 调用中添加这个。

【讨论】:

  • 这个问题真是老头了。无需添加您的答案
  • 我花了一天时间解决了这个问题。旧的或新的,这可以帮助任何人。
猜你喜欢
  • 2012-06-20
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多