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

Вы не можете перезаписать success и error обратные вызовы jQuery.ajax путем использования соответствующих свойств в ajaxGridOptions. Если вы посмотрите the source code jqGrid, вы увидите, что jqGrid использует обратные вызовы. Внутри success callbacks jqGrid обрабатывает ответ сервера и заполняет сетку, затем скрывает div «Loading ...». Определяя success и error обратные вызовы внутри ajaxGridOptions вы ключите обработку Ajax, используемую jqGrid.

+0

Большое спасибо Олегу и kmk. Сетка отображает данные сейчас. передавать параметры в службу из сетки. У меня были проблемы с этим, но я собираюсь попробовать когда-нибудь, прежде чем обращаться за помощью :) –

+0

@GomtiMehta: приветствую! jqGrid отправляет на сервер параметры по умолчанию. необходимо отправить дополнительные данные, вы можете использовать параметр 'postData', определенный как объект. Я рекомендую вам определить свойства параметра postData' как функции. См. [ответ] (http://stackoverflow.com/a/2928819/315935) для подробности. – Oleg

+0

Большое спасибо, Олег, это именно то, что я сделал, и это работает как шарм :). –

0

Ваш jsonReader смотрит немного измученный. Символ 'd' переносит возврат JSON для вызовов службы ASMX с ASP.NET 3.5. Смотрите здесь: http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/

Try:

 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

Hi kmk, Спасибо за быстрый ответ. Я возвращаю список из моего метода WebService, как показано ниже [WebMethod] [ScriptMethod (ResponseFormat = ResponseFormat.Json)] общественного List BatchReceiptsTable() { У меня нет какой-либо модели для представления что-то вроде GridData, как вы показали. У меня есть класс, который представляет только тип элементов, которые я покажу в сетке, и список содержит их. Требуется ли создать такой тип, как «GridData? –

+0

Да, я бы рекомендовал создать объект, который соответствует тому, как вы определяете jsonReader. И слушайте Олега ниже - ваши обработчики успеха, завершения и обработки ошибок переопределяются в ajaxGridOptions prop. Используйте события, чтобы справиться с успехом и неудачей: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events – kmk

Смежные вопросы