2013-08-20 79 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