2013-03-21 5 views
0

это действительно делают меня с ума, я читал какой-то вопрос: неjqgrid не отображаются JSon данные

  1. how to display jqgrid from url (local data works, url data does not)
  2. jqGrid not displaying JSON data
  3. jqGrid not displaying JSON data
  4. jgGrid not displaying json data

ни один из них работает для моего дела. Я уже проверяю свой json на http://jsonlint.com/, и он говорит действительный JSON. я хочу jqgrid, чтобы отобразить таблицу из localhost/mine/jqgrid/json, который будет:

[{"id":"1","invdate":"1","name":"1","note":"1","amount":"1"}, 
{"id":"2","invdate":"2","name":"2","note":"2","amount":"2"}, 
{"id":"3","invdate":"3","name":"3","note":"3","amount":"3"}, 
{"id":"4","invdate":"4","name":"4","note":"4","amount":"4"}, 
{"id":"5","invdate":"5","name":"5","note":"5","amount":"5"}] 

и это мой сценарий:

<!DOCTYPE html> 
<!--[if lt IE 7]>  <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]>   <html class="no-js lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]>   <html class="no-js lt-ie9"> <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
     {nocache} 
     <title>{$title}</title> 
     {/nocache} 
     <meta name="description" content=""> 
     <meta name="viewport" content="width=device-width"> 

     <!--jqGrid sangat tergantung kepada CSS jquery-ui--> 
     <link rel="stylesheet" type="text/css" media="screen" href="{#base_url#}/mine/assets/default/styles/jqgrid/jquery-ui-custom.css" /> 
     <link rel="stylesheet" type="text/css" media="screen" href="{#base_url#}/mine/assets/default/styles/jqgrid/ui.jqgrid.css" /> 
     <style type="text/css"> 
     html, body { 
      margin: 0; 
      padding: 0; 
      font-size: 1em; 
     } 
     </style> 
     <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> 
     <script src="{#base_url#}/mine/assets/default/scripts/jqgrid/jquery.js" type="text/javascript"></script> 
     <script src="{#base_url#}/mine/assets/default/scripts/jqgrid/jquery-ui-custom.min.js" type="text/javascript"></script> 
     <script src="{#base_url#}/mine/assets/default/scripts/jqgrid/grid.locale-en.js" type="text/javascript"></script> 
     <script src="{#base_url#}/mine/assets/default/scripts/jqgrid/jquery.jqGrid.min.js" type="text/javascript"></script> 
     <!--prevent Smarty to parsing--> 
     {literal} 
     <script type="text/javascript"> 
     $(function(){ 
      $("#list").jqGrid({ 
      //ini buat paging, value nya adalah ID dari HTML 
      pager: '#pager', 
      url:'localhost/mine/jqgrid/json', 
      datatype: "json", 
      height: 300, 
      colNames:['ID','Inv Date','Name', 'Note','Amount','Tax','Total'], 
      /** 
      * to able to sort the right way, u must include sorttype:'int' for integer field 
      */ 
      colModel :[ 
       {name:'id', index:'id',width:20, sorttype:'int'}, 
       {name:'invdate', index:'invdate', width:55}, 
       {name:'name', index:'name', width:90}, 
       {name:'note', index:'note', width:80, align:'right'}, 
       {name:'amount', index:'amount', width:80, align:'right'}, 
       {name:'tax', index:'tax', width:80, align:'right'}, 
       {name:'total', index:'total', width:150, sortable:true} 
      ], 
      rowNum: 10, 
      rowList:[10,20,30,40,50], 
      recordpos: 'right', 
      viewrecords: true, 
      sortorder: "desc", 
      sortname: "id", 
      sorttype: "integer", 
      viewrecords: true, 
      multiselect: false, 
      caption: "Manipulating JSON Data", 
      recordtext: "Lihat {0} - {1} dari {2}", 
      emptyrecords: "Tidak ada data", 
      loadtext: "Loading...", 
      pgtext : "Page {0} of {1}", 
      jsonReader : { 
       repeatitems: false, 
       id: "id", 
       root: function (obj) { 
       return obj; 
      }},  
      }); 
     }); 
     </script> 
     {/literal} 
     <!--end of parsing--> 
    </head> 
    <body> 
     <!--[if lt IE 7]> 
      <p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to improve your experience.</p> 
     <![endif]--> 

     <!--this is it, jqGrid load in here--> 
     <table id="list"><tr><td/></tr></table> 
     <div id="pager"></div> 
     <!--end of jqGrid--> 
     <p>{#app_name#}</p> 
    </body> 
</html> 

пожалуйста, помогите мне решить эту проблему, заранее спасибо.

+0

У вас есть правильный ответ здесь: [jqGrid не отображает данные JSON] (http://stackoverflow.com/questions/5018177/jqgrid-not-displaying-json-data). Ваши данные не содержат информации подкачки, поэтому вы должны поместить определения 'page',' total' и 'records' в ваш' jsonReader'. Я чувствую необходимость отмечать его как возможный дубликат. – tpeczek

+0

У меня все еще ничего нет. стол все еще пуст. – Bari

+0

Можете ли вы проверить (с помощью Fiddler, FireBug и т. Д.), Что запрос выполняется, и возвращается правильный ответ? – tpeczek

ответ

1

Я думаю, что код, который вы вывесили почти правильно. The demo использует данные JSON и почти ваш код. Он отображает

enter image description here

я удалил только дубликаты viewrecords вариант и изменил height: 300 к height: "auto", чтобы лучше выглядеть. Я бы рекомендовал вам использовать loadonce: true, если вы сразу загружаете все данные с сервера. В случае, если datatype будет изменен на "local" после первой загрузки данных с сервера, и все последующие сортировки, пейджинг и фильтрация данных будут реализованы локально.

Я не знаю, что является ошибкой в ​​вашем коде. Одна из возможных причин может быть неправильным HTTP-заголовком в ответе сервера, поэтому ответ JSON будет интерпретироваться jQuery как XML или HTML-данными. Я рекомендую вам дополнительно включить обратный вызов loadError, чтобы получить дополнительную информацию об ошибке, если сетка по-прежнему остается пустой. Посмотрите на the answer для более подробной информации.

Кстати, я опубликовал the suggestion (см. the src-file), что позволило бы автоматически определять различные варианты ввода формата JSON. Надеюсь, что предложение будет принято трирандой, и у вас будет гораздо меньше вопросов о проблемах с чтением данных JSON.

+0

спасибо, за ваш ответ. я попробовал [link] http://stackoverflow.com/a/6969114/315935, и браузер говорит: «HTTP-статус-код0 ошибка с ошибкой текстового сообщения». что происходит? – Bari

+0

@barreybunshin: Я рекомендую вам использовать [Fiddler] (http://www.fiddler2.com/Fiddler2/version.asp) или [Firebug] (https://getfirebug.com/) или инструменты разработчика IE или Chrome улавливать HTTP-трафик. Важно, что значение имеет HTTP-заголовок «Content-Type» в ответе сервера **. Это должно быть 'application/json'. – Oleg

+0

Я проверил его с помощью Firebug и получил данные JSON в консоли> All> Response. но все же, таблица пуста. Я изменяю url на url: 'json', и статус в порядке. не появляется всплывающее окно с ошибкой. – Bari

0

Данные JSON должны быть, как это

{ 
"page":"1", 
    "total":2, 
    "records":"13", 
    "rows": [{"id":"1","invdate":"1","name":"1","note":"1","amount":"1"}, 
      {"id":"2","invdate":"2","name":"2","note":"2","amount":"2"}, 
      {"id":"3","invdate":"3","name":"3","note":"3","amount":"3"}, 
      {"id":"4","invdate":"4","name":"4","note":"4","amount":"4"}, 
      {"id":"5","invdate":"5","name":"5","note":"5","amount":"5"}] 
} 

И изменить

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

в

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