2013-02-04 4 views
1

Мне нужно заполнить jqgrid после вызова ajax.Как загрузить данные (json) в jqgrid через ajax?

У меня есть функция (в Java servelet), который возвращает этот формат JSON:

[{"citta":"XXXX","via":"XXX","telefono":"1111-11111","provincia":"XX","clienteDesc":"Prova","clienteCode":"XXXXX"}] 

и я использую этот код для jqgrid:

   $("#clienti-navgrid").jqGrid({ 
          //data: c 
          //datatype: "local" 
          datatype: "json", 
       url: '/project/loadnotespese.do', 
       colNames:['Codice Cliente','Descrizone Cliente','Via','Città','Provincia','Telefono'],     
       colModel:[ 
         {name:'clienteCode', index:'clienteCode', width:'10', sortable:false}, 
         {name:'clienteDesc', index:'clienteDesc', width:'20', sortable:false}, 
         {name:'via', index:'via', width:'30', sortable:false}, 
         {name:'citta', index:'citta', width:'20', sortable:false}, 
         {name:'provincia', index:'provincia', width:'10', sortable:false}, 
         {name:'telefono', index:'telefono', width:'10', sortable:false} 
       ], 
       rowNum:500, 
       autowidth:true, 
       height:'auto', 
       recordtext:"Ordini trovati {2}", 
       emptyrecords:"Nessun risultato", 
       viewrecords: true, 
       caption: 'Tabella Clienti',   
       localReader : { 
            // 
        repeatitems: false, 
       } 
      });//jqGrid 

если я поставил

var c = [{"citta":"XXXX","via":"XXX","telefono":"1111-11111","provincia":"XX","clienteDesc":"Prova","clienteCode":"XXXXX"}] 

и

data: c, datatype: "local", 

работает, но если я получу от url: '/project/loadnotespese.do', он не работает. Любая помощь?

+0

Я забыл упомянуть 'root' в' jsonReader'. См. ** ОБНОВЛЕНО ** часть моего ответа. – Oleg

ответ

1

Если вы используете datatype: "local", то будет использоваться опция localReader. Кстати, значение repeatitems: false равно по умолчанию значение для localReader (см. the documentation). Поэтому в случае использования datatype: "local" вы можете удалить текущую опцию localReader: { repeatitems: false } из списка параметров.

С другой стороны, если вы используете datatype: "json"другой вариант будет использоватьсяjsonReader. Значение по умолчанию repeatitems: jsonReader - repeatitems: false (см. the documentation). Таким образом, вы должны добавить

jsonReader: { repeatitems: false } 

в кейс к списку вариантов jqGrid. После этого сетка должна быть успешно заполнена.

Еще одно важное мнение, которое важно знать, указывается из id свойство в каждом элементе строки данных. Значение id должно быть уникальным на всей странице, и оно будет использоваться как значение id атрибутов строк (<tr>) элементов тела сетки. Если какое-либо другое свойство элементов строки можно использовать как уникальный идентификатор, вы можете либо включить дополнительную настройку в jsonReader, либо добавить свойство key: true в соответствующее определение столбца в colModel. Например, если clienteCode можно интерпретировать как ROWID вы можете использовать

jsonReader: { repeatitems: false, id: "clienteCode" } 

ОБНОВЛЕНО: Вы должны использовать дополнительно

root: function (obj) { return obj; } 

внутри jsonReader (см here). Таким образом, окончательный jsonReader должен быть

jsonReader: { 
    repeatitems: false, 
    id: "clienteCode", 
    root: function (obj) { 
     return obj; 
    } 
} 
+0

hi oleg, tks для ответа. Я установил jsonReader: {repeatitems: false, id: "clienteCode"}, но все еще не заполняет данные в jqgrid –

+0

@GiacomoSavioli: Вы пытались использовать 'root: function (obj) {return obj; } '(см. обновленную часть моего ответа) – Oleg

+0

ty очень много! это работает!: D –

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