1

jqGrid で json データを表示するときに問題が発生しています。

私はこのフォーラムで多くのことを検索し、それを機能させるためにさまざまなフォームを試しました. これがすでに回答されている場合は申し訳ありませんが、これについて本当に助けが必要です.

サーバーページでは、JavaScriptSerializerのみを使用してデータとjsonreader関数をデフォルトのパラメーターで送信していました (これは問題なく動作しました)。

ページネーションを行う必要があり、サーバー ページ コードをsidxsordpagerowsパラメーターで動作するように変更しました。

サーバーからの結果の文字列は次のようになります。

{"total":"344","page":"1","records":"8577","root":[{"Id":"1","SerialNumber":"132","Name":"ServerName"},...]}

ここに私のjQueryコードがあります:

$("#list").jqGrid({
        datatype: "json",
        mtype: 'GET',
        url:'https://server/handlerpage.ashx',
        colNames:['Id','SerialNumber','Name'],
        colModel :[         
                {name:'Id', index:'Id', jsonmap:"Id", width:20},
                {name:'Name', index:'Name', jsonmap:"Name", width:120},
                {name:'SerialNumber', index:'SerialNumber', jsonmap:"SerialNumber", width:100}],    
        jsonreader: {repeatitems:false,id:'Id',root:'root'},
        pager: '#pager',
        rowNum:25,
        rowList:[25,50,75,100],
        sortname: 'Id',
        viewrecords:true,
        gridview: true,
        height:"400",
        width:"700",
        caption: 'Select from existing server',
        loadtext:'Loading, please wait'
      }).navGrid("#pager", { edit: false, add: false, search: true, del: false });
4

3 に答える 3

3

json データをクエリからの応答として使用するには、応答を正しくフォーマットする必要があります。どれが正しい回答で、どのように文書から取得するのかを判断するのは困難です。サーバー設定が応答の一部として警告を生成し、グリッドがロードされない結果として、さらに多くの問題が発生する可能性があります。

ドキュメントから、これはデフォルトのjsonリーダーです。つまり、応答を正しくフォーマットすれば、何も追加する必要はありません/カスタムjsonリーダー。

jsonReader : { 
  root: "rows", 
  page: "page", 
  total: "total", 
  records: "records", 
  repeatitems: true, 
  cell: "cell", 
  id: "id",
  userdata: "userdata",
  subgrid: { 
     root:"rows", 
     repeatitems: true, 
     cell:"cell" 
  } 

まず、正しい応答形式であることを確認してください。 {"page":1,"total":1,"records":"2","rows":[{"id":"1","cell":["1","mydata1"]},{"id":"2","cell":["2","mydata2"]}]}

ドキュメント ページにサンプルはありませんが、グリッドに列が 2 つしかない場合は上記が正しいです。この形式を返すには、サーバー クエリ/サーバー クエリの解析と、サーバー サイド スクリプトを実行するページに渡される値を取得する必要があります。ドキュメントの example.php ページには、必要なすべての値が含まれています。

このコードは、エラー警告を回避し、上記の応答と一致するように、適切なヘッダーを提供します。また、ドキュメントでは、連想配列のインデックス名のインデックスの周りにアポストロフィを追加していないことに注意してください。それは失敗します。

header('Content-type: application/json');$responce = new stdClass();$responce->page = $page;$responce->total = $total_pages;$responce->records = $count;$i=0;while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {$responce->rows[$i]['id']=$row['ID'];$responce->rows[$i]['cell']=array($row['ID'],$row['entity_name']); $i++; } echo json_encode($responce);

ドキュメントに欠けているものを再ハッシュするには (私がそれらを見逃した可能性があり、たとえ jQgrid のドキュメントが叙事詩/マスターの仕事であったとしても): 1. json のヘッダーステートメントの必要性についての言及はありません (明らかですXML の例を参照してください) 2. 返された文字列がどのように機能するかのサンプルがありません。 3. 連想配列のインデックスが適切にフォーマットされていません。4. 応答の一部として返される PHP 警告を回避する方法についての言及がない

于 2013-03-13T18:57:30.133 に答える
1

以下を試してください

jsonReader: {
    root: 'rows',
    page: 'page',
    total: 'total',
    records: 'records',
    repeatitems: true,
    cell: 'cell',
    id: 'id',
    userdata: 'userdata'
}
于 2012-03-27T18:01:11.807 に答える
0

サーバー側のスクリプトがHEADERSを含む適切な json 文字列を返していることを確認してください。

デモサイトと JSON の例を さらに確認する

于 2012-03-27T17:43:47.233 に答える