2013-08-20 127 views
0

我正在使用asmx服务来返回数据以显示在jqGrid中。我可以看到json数据在完全回调中返回。这是完整回调中的json数据看起来像{"d":[{"__type":"HHSC.CTF.Business.BatchReceiptModel","BReceiptId"....。我不知道它为什么在d:之前,也是数据的类型名称。 这是我的jqGrid的设置看起来像jqGrid不断显示“正在加载”

$("#list").jqGrid({ 
    url: "../../WebServices/BatchReceiptsWebService.asmx/BatchReceiptsTable", 
    datatype: "json", 
    mtype: 'POST', 
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8', 
     success: function (data, status) { 

     }, 
     complete: function (xhr) { 

     }, 
     error: function (jqXHR, textStatus, errorThrown) { 

     } 
    }, 
    serializeGridData: function (postData) { 
     return JSON.stringify(postData); 
    }, 
    jsonReader: { 
     repeatitems: false, 
     id: "BReceiptId", 
     page: function (obj) { return 1; }, 
     total: function (obj) { return 1; }, 
     root: function (obj) { return obj; }, 
     records: function (obj) { 
      return obj.d.length; 
     } 
    }, 
    colNames: ['BReceiptId', 'ReceiptNumber', 'ReceiptAmount'], 
    colModel: [ 
        { name: 'BReceiptId', index: 'BReceiptIdnId', width: 100 }, 
        { name: 'ReceiptNumber', index: 'ReceiptNumber', width: 150 }, 
        { name: 'ReceiptAmount', index: 'ReceiptAmount', align: 'right', width: 100 } 
       ], 
    rowNum: 10, 
    loadonce: true, 
    gridview: true, 
    rownumbers: true, 
    rowList: [10, 20, 30], 
    viewrecords: true 

}); 

回答

1

通过使用ajaxGridOptions中的相应属性,您不能覆盖successerror回调jQuery.ajax。如果您检查jqGrid的the source code,您会看到jqGrid使用回调函数。里面success回调jqGrid处理服务器响应并填充网格,然后它隐藏“Loading ...”div。 通过在ajaxGridOptions中定义successerror回调函数,可以使用jqGrid使用Ajax处理。

+0

谢谢你这么多奥列格和KMK网格现在显示的数据我的下一个任务是将参数从电网传递给服务曾经有过与烦恼,但我会要求帮助:) –

+0

@GomtiMehta之前尝试了一段时间。!欢迎您的jqGrid发送一些参数,每个服务器默认如果你。需要发送可以使用'postData'参数定义为对象的附加数据。我建议你定义postData'参数作为功能的'特性。参见[答案](http://stackoverflow.com/a/2928819/315935),用于详情。 – Oleg

+0

非常感谢奥列格,这正是我所做的,它像一个魅力:)。 –

0

你jsonReader正在一点点顶进。 'd'字符包装自ASP.NET 3.5起的ASMX服务调用的JSON返回值。在这里看到:http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/

尝试:

 jsonReader: { 
      repeatitems: false, 
      root: "d.rows", // or d dot whatever property name you use for the collection of data 
      page: "d.page", // or d dot whatever property name you use for the current page 
      total: "d.total", // or d dot whatever property name you use for total pages 
      records: "d.records", // or d dot whatever property name you use for total record count 
      id: "BReceiptId", 
     }, 

在这里看到:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_data

我返回一个对象,看起来像这样:

public class GridData<T> 
{ 
    public int Total { get; set; } 
    public int Page { get; set; } 
    public int Records { get; set; } 
    public List<T> Rows { get; set; } 
    public object UserData { get; set; } 
} 

所以我jsonReader如下(请注意区分大小写):

 jsonReader: { 
      repeatitems: false, 
      root: "d.Rows", 
      page: "d.Page", 
      total: "d.Total", 
      records: "d.Records", 
      userdata: "d.UserData", 
      id: "Id" 
     }, 
+0

嗨kmk,感谢您的快速响应。我从我的web服务方法如下面 [的WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 公开名单 BatchReceiptsTable() { 我没有任何模型来表示返回的列表就像你所说的GridData一样。我有类只代表我要去的项目类型显示在网格中,列表包含这些。是创建一个类型,如“的GridData –

+0

是的,我会建议建立符合你如何定义jsonReader的对象,听下面奥列格它需要? - 您的成功,完整和错误处理程序在ajaxGridOptions被overrridden支撑。使用事件处理成功和失败:。http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events – kmk