Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JqGrid addJSONData+;ASP.NET 2.0 WS_Asp.net_Jquery_Web Services_Json_Jqgrid - Fatal编程技术网

JqGrid addJSONData+;ASP.NET 2.0 WS

JqGrid addJSONData+;ASP.NET 2.0 WS,asp.net,jquery,web-services,json,jqgrid,Asp.net,Jquery,Web Services,Json,Jqgrid,我有点迷路了。我尝试实现一个基于JqGrid的解决方案,并尝试使用函数作为数据类型。我已经按照书中的内容进行了设置,我调用了WS并返回了JSON,我在客户端的ajax调用中获得了成功,我使用addJSONData对jqGrid进行了“绑定”,但网格仍然是空的。我现在没有任何线索。。。相同页面上的其他“本地”示例可以正常工作(jsonstring…) 我的WS方法如下所示: [WebMethod] [ScriptMethod(ResponseFormat = ResponseFor

我有点迷路了。我尝试实现一个基于JqGrid的解决方案,并尝试使用函数作为数据类型。我已经按照书中的内容进行了设置,我调用了WS并返回了JSON,我在客户端的ajax调用中获得了成功,我使用
addJSONData
对jqGrid进行了“绑定”,但网格仍然是空的。我现在没有任何线索。。。相同页面上的其他“本地”示例可以正常工作(jsonstring…)

我的WS方法如下所示:

[WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string GetGridData()  
         {  
             // Load a list 
             InitSessionVariables();
             SA.DB.DenarnaEnota.DenarnaEnotaDB db = new SAOP.SA.DB.DenarnaEnota.DenarnaEnotaDB();
             DataSet ds = db.GetLookupForDenarnaEnota(SAOP.FW.DB.RecordStatus.All);

             // Turn into HTML friendly format  
             GetGridData summaryList = new GetGridData();

             summaryList.page = "1";
             summaryList.total = "10";
             summaryList.records = "160";
             int i = 0;
             foreach (DataRow dr in ds.Tables[0].Rows)  
             {
                 GridRows row = new GridRows();
                 row.id = dr["DenarnaEnotaID"].ToString();
                 row.cell = "[" + "\"" + dr["DenarnaEnotaID"].ToString() + "\""
                                       + "," + "\"" + dr["Kratica"].ToString() + "\""
                                       + "," + "\"" + dr["Naziv"].ToString() + "\""
                                       + "," + "\"" + dr["Sifra"].ToString() + "\""

                          + "]";
                 summaryList.rows.Add(row);
             }  
             return JsonConvert.SerializeObject(summaryList);

         }
我的ASCX代码如下:

jQuery(document).ready(function() {
  jQuery("#list").jqGrid({
    datatype: function(postdata) {
      jQuery.ajax({
        url: '../../AjaxWS/TemeljnicaEdit.asmx/GetGridData',
        data: '{}',
        dataType: 'json',
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        complete: function(jsondata, stat) {
          if (stat == "success") {
            var clearJson = jsondata.responseText;

            var thegrid = jQuery("#list")[0];
            var myjsongrid = eval('(' + clearJson + ')');
            alfs
            thegrid.addJSONData(myjsongrid.replace(/\\/g, ''));
          }
        }
      });
    },
    colNames: ['DenarnaEnotaID', 'Kratica', 'Sifra', 'Naziv'],
    colModel: [{
        name: 'DenarnaEnotaID',
        index: 'DenarnaEnotaID',
        width: 100
      },
      {
        name: 'Kratica',
        index: 'Kratica',
        width: 100
      },
      {
        name: 'Sifra',
        index: 'Sifra',
        width: 100
      },
      {
        name: 'Naziv',
        index: 'Naziv',
        width: 100
      }
    ],

    rowNum: 15,
    rowList: [15, 30, 100],
    pager: jQuery('#pager'),
    sortname: 'id',
    //  loadtext:"Nalagam zapise...",
    // viewrecords: true, 
    sortorder: "desc",
    // caption:"Vrstice", 
    // width:"800",
    imgpath: "../Scripts/JGrid/themes/basic/images"
  });

});
我从WS获得如下JSON:

{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“},{”id”:”19″,”cell”:”["19","RSD","Srbski dinar","941"]“},{”id”:”20″,”cell”:”["20","AFN","Afgani","971"]“},{”id”:”21″,”cell”:”["21","ALL","Lek","008"]“},{”id”:”22″,”cell”:”["22","DZD","Alžirski dinar","012"]“},{”id”:”23″,”cell”:”["23","AOA","Kvanza","973"]“},{”id”:”24″,”cell”:”["24","XCD","Vzhodnokaribski dolar","951"]“},{”id”:”25″,”cell”:”

………………

["13","PLN","Poljski zlot","985"]“},{”id”:”14″,”cell”:”["14","SEK","Švedska krona","752"]“},{”id”:”15″,”cell”:”["15","SKK","Slovaška krona","703"]“},{”id”:”16″,”cell”:”["16","USD","Ameriški dolar","840"]“},{”id”:”17″,”cell”:”["17","XXX","Nobena valuta","000"]“},{”id”:”1″,”cell”:”["1","SIT","Slovenski tolar","705"]“}]}
{"d": "{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“}"
我已注册此JavaScript:

clientSideScripts.RegisterClientScriptFile("prototype.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/prototype-1.6.0.2.js"));

clientSideScripts.RegisterClientScriptFile("jquery.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.js"));
clientSideScripts.RegisterClientScriptFile("jquery.jqGrid.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/jquery.jqGrid.js"));
clientSideScripts.RegisterClientScriptFile("jqModal.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqModal.js"));
clientSideScripts.RegisterClientScriptFile("jqDnR.js", CommonFunctions.FixupUrlWithoutSessionID("~/WebUI/Scripts/JGrid/js/jqDnR.js"));

基本上我认为这一定是愚蠢的事情。。。但是我现在想不出来……

过去几个小时我一直在试图解决同样的问题。我现在已经放弃了让AddJSONData工作——我的web服务方法返回一个数组,所以看起来使用addRowData可以工作

function ReceivedClientData(data) {
        var thegrid = $("#list4");
        for (var i = 0; i < data.length; i++) {
            thegrid.addRowData(i+1, data[i]);
        }
    }
函数接收客户端数据(数据){
var thegrid=$(“#列表4”);
对于(变量i=0;i
实际上,关键似乎是addJSONData上的参数,这些参数在文档中没有出现:

function ReceivedClientData(data) {
        var thegrid = $("#rowed2");
        thegrid[0].addJSONData(data,thegrid.bDiv,9)            
    }
随之而来的web方法是:

    [WebMethod(EnableSession = true)]
    public object GetTestClients(int pagenum, int rows)
    {
        var lst = Session["lst"] as List<Entities.Client>;
        if (lst == null)
        {
            lst = new List<Entities.Client>();
            for (int i = 1; i <= 5; i++)
            {
                lst.Add(new TF.WebApps.Entities.Client()
                {
                    ClientID = "Client" + i,
                    Firstname = "first" + i,
                    Lastname = "last" + i
                });
            }
            Session["lst"] = lst;
        }
        var v = from c in lst
                select new
                {
                    id = c.ClientID,
                    cell = new object[] 
                    {
                        c.ClientID,
                        c.Firstname,
                        c.Lastname
                    }
                };

        var result = new
        {
            total = v.Count() / rows,
            page = pagenum,
            records = rows,
            rows = v.Skip((pagenum-1)*rows).Take(rows).ToArray()
        };


        return result;
    }
[WebMethod(EnableSession=true)]
公共对象getTestClient(int pagenum,int行)
{
var lst=会话[“lst”]作为列表;
如果(lst==null)
{
lst=新列表();

对于(inti=1;i,jqGrid的设置看起来很好

您确定在
jsondata.responseText
中返回的内容就是您所描述的吗

我在.NET中编写的Web服务返回如下格式的JSON:

{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“},{”id”:”19″,”cell”:”["19","RSD","Srbski dinar","941"]“},{”id”:”20″,”cell”:”["20","AFN","Afgani","971"]“},{”id”:”21″,”cell”:”["21","ALL","Lek","008"]“},{”id”:”22″,”cell”:”["22","DZD","Alžirski dinar","012"]“},{”id”:”23″,”cell”:”["23","AOA","Kvanza","973"]“},{”id”:”24″,”cell”:”["24","XCD","Vzhodnokaribski dolar","951"]“},{”id”:”25″,”cell”:”

………………

["13","PLN","Poljski zlot","985"]“},{”id”:”14″,”cell”:”["14","SEK","Švedska krona","752"]“},{”id”:”15″,”cell”:”["15","SKK","Slovaška krona","703"]“},{”id”:”16″,”cell”:”["16","USD","Ameriški dolar","840"]“},{”id”:”17″,”cell”:”["17","XXX","Nobena valuta","000"]“},{”id”:”1″,”cell”:”["1","SIT","Slovenski tolar","705"]“}]}
{"d": "{”page”:”1″,”total”:”10″,”records”:”160″,”rows”:[{"id":"18","cell":"["18","BAM","Konvertibilna marka","977"]“}"
在我的职能中,我必须这样做:

complete: function(data) {
    var stuff = JSON.parse(data.responseText);
    jQuery("#grid")[0].addJSONData(JSON.parse(stuff.d));
}
我必须将字符串转换为JSON两次,然后才能真正获得所需的数据

如果您遇到了很大的问题。我建议逐个调试。执行以下简单语句:

jQuery("#list")[0].addJSONData(JSON.parse("{total: 1, page: 1, records: 1, rows : [ {id: '1', cell:['1', '2007-10-01', 'test', 'note', 'new', '200.00', '10.00', '210.00']} ] }"));
这至少应该是可行的。在那之后,只需分析从web服务获得的输出,并确保您可以得到要执行的“complete”语句。

这对我来说是可行的:

mygrid[0].addJSONData(result, mygrid.bDiv, 0);
或者试试这个:

mygrid[0].addJSONData($.toJSON(result), mygrid.bDiv, 0);

我的网格数据类型是jsonstring。

我还使用Web服务将数据传递给jqGrid。我遇到了同样的问题,下面是.ajax函数完整部分的代码

complete: function(jsondata, stat) {
             if (stat == "success") {
                var thegrid = jQuery("#list2")[0];
                var jsonObject = eval('(' + jsondata.responseText + ')');
                thegrid.addJSONData(jsonObject.d);
             }
           }

关键是将responseText计算为JSON对象后的.d

我知道它很旧,但这可能是您的问题

把row.cell列成一个列表,然后你就可以

row.cell = new List {
    dr["DenarnaEnotaID"]
    ,dr["Kratica"]
    ,dr["Naziv"]
    ,dr["Sifra"]
};
在脚本方面

var myjsongrid = eval('('+clearJson+')');
...
thegrid.addJSONData(myjsongrid.replace(/\\/g,''));
myjsongrid在这一点上是一个对象,对象上通常没有.replace方法。此外,您可能应该使用JSON解析器而不是eval。我自己使用Crockford的json2.js的修改版本,但YMMV


这应该使每一行都符合您的要求,让序列化程序处理转换…我实际上将我的数据表序列化为{columns:['colname',…],rows:['row1val',…],['row2val',…],…],…]}和frob it客户端,因为我使用了一些相同的调用来填充各种网格…我有一个客户端selectForJqGrid(table,keycol,[col list]),将其设置为直接用于jqGrid。

您的问题是,您应该将
addJSONData
与responseText一起使用。
eval
它,然后将JSON字符串解析为JavaScript中的JSON。这应该可以解决问题

对于Frenchie的回答,我仍然要补充一些技巧:

complete: function(jsondata, stat) {
         if (stat == "success") {              
            var jsonObject = (eval("(" + jsondata.responseText + ")"));
             $('#list2')[0].addJSONData(JSON.parse(jsonObject.d));
         }
       }
这就是你的JSON。JqGrid应该正确配置
JsonReader
,这样在你加载数据时不会出现错误,比如:提供你所有的索引。这应该可以解决你的问题

jsonReader: {
            root: "rows", //arry containing actual data
            page: "page", //current page
            total: "total", //total pages for the query
            records: "records", //total number of records
            repeatitems: false,
            id: "DenarnaEnotaID" //index of the column with the PK in it
        },

我对jqGrid的一些建议是多么的误导感到惊讶

有两种方法可以从您的服务向jqGrid提供JSON数据

您可以编写一个方法来为jqGrid返回一个“块”数据,其中的数据只够一页结果

或者,您可以让自己的生活变得轻松,一次返回所有JSON数据,让jqGrid处理分页,而无需进一步调用JSON服务

关键是loadonce jqGrid设置:

loadonce: true,
例如,我有一个JSON web服务,它返回特定客户ID的订单列表:

…我想用它创建这个jqGrid:

下面是我的jqGrid声明的样子:

$("#tblOrders").jqGrid({
    url: 'http://www.iNorthwind.com/Service1.svc/getOrdersForCustomer/BERGS',
    contentType: "application/json",
    datatype: "json",
    jsonReader: {
        root: "GetOrdersForCustomerResult",
        id: "OrderID",
        repeatitems: false
    },
    mtype: "GET",
    colNames: ["ID", "Date", "ShipName", "ShipAddress", "ShipCity", "ShippedDate"],
    colModel: [
        { name: "OrderID", width: 80, align: "center" },
        { name: "OrderDate", width: 90, align: "center" },
        { name: "ShipName", width: 250 },
        { name: "ShipAddress", width: 250 },
        { name: "ShipCity", width: 95 },
        { name: "ShippedDate", width: 95 },
    ],
    pager: "#pager",
    height: 'auto',
    rowNum: 8,
    rowList: [8, 16, 24],
    loadonce: true,
    sortname: "OrderID",
    sortorder: "desc",
    viewrecords: true,
    gridview: true,
    autoencode: true,
    caption: "Northwind orders"
});
请注意以上三行:

    jsonReader: {
        root: "GetOrdersForCustomerResult",
        id: "OrderID",
        repeatitems: false
    },
这可以防止出现令人讨厌的“addJSONdata”异常,并告诉jqGrid,实际上,我们的JSON数据数组存储在我的JSON结果的GetOrdersForCustomerResult部分

{
  GetOrdersForCustomerResult: [
  {
    OrderDate: "8/12/1996",
    OrderID: 10278,
    ShipAddress: "Berguvsvägen 8",
    ShipCity: "Luleå",
    ShipName: "Berglunds snabbköp",
    ShipPostcode: "S-958 22",
    ShippedDate: "8/16/1996"
  },
  {
    OrderDate: "8/14/1996",
    OrderID: 10280,
    ...etc...
就这样,根本不需要调用AddJSONdata

此示例的完整演练可在我的博客上找到:


(我希望在三小时前,当我开始研究这些问题时,我能读到这篇文章!!)

我得到的json与发布的类似,因为我使用了非.net json序列化程序。对,请仔细检查。您是否尝试在document.ready或onclick函数期间自己执行该函数?只是想看看它是否自己添加了该函数?谢谢,这是解决方案:)请有人把Tom的答案作为答案:)谢谢如果你不分页,你可以将这些行嵌入到一个对象标记中…{“页面”:1,“总计”:1,“记录”:rows.length,“记录”:rows}并将其与addJSONData一起使用。这是一个解决方案,根据你从Web服务获得的内容进行一些修改……对我来说是:success:function(jsondata,stat){var thegrid=$(“#list”);var evaluated=JSON.parse(jsondata.d);for(var i=0;i