2009-06-29 62 views
4

私は誰かがこれについていくつかの洞察を持っているかもしれないかと思った。 jqGridは、このJSON文字列にはかなり満足です。jqGrid - jsonreaderをどのように設定するのですか?

{id:'-1','result':{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]}} 

すなわち:

{'page':'1','total':1,'records':'4','rows':[{'id':1,'title':'Story Manager','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':2,'title':'Analysis','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':3,'title':'Narrative','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'},{'id':4,'title':'Graphic','assigned':'2009-06-22T10:52:28.0687738-05:00','due':'2009-07-29T10:52:28.0687738-05:00','completed':'2009-07-14T10:52:28.0687738-05:00'}]} 

Jayrock(.NET JSON-RPCフレームワークは)としてJSON文字列を供給しますそれは作業中のJSONの周りに "{id:'-1','result':{ /* ... snip ... */ }}"ラッパーを追加します。

JSON結果の解析を開始する正しい場所にjqGridのjsonReaderプロパティを指定する必要はありますか?私はこのすべてを持つ時間の一体:)

---編集を抱えている---

私は簡単な例を投稿したかった...あなたの答え、Stuntzに感謝を。次の例で必要なのは、.NET、JayrockjQuery、およびjqGridです。これは上記のJSONで動作します。私はあなたがコンテンツの種類を設定する必要があるかどうか忘れています。

var lastsel; // last row selected (for editing)  

jQuery(document).ready(function(){ 
    jQuery("#mygrid").jqGrid({ 
     contentType: "text/plain; charset=utf-8", 
     datatype: function(postdata) 
     { 
      $.ajax({ 
       url: 'http://localhost:2064/StoryManager/StoryManager.ashx/getPageItemRoles?id=3', 
       data: postdata, 
       complete: function(response, status) 
       { 
        if(status=='success') 
        { 
         var mygrid = jQuery("#mygrid")[0]; 
         var o = eval("(" + response.responseText + ")"); // TODO don't use eval. it's insecure, but older browsers support it... 
         mygrid.addJSONData(o.result); 
        } 
       } 
      }) 
     },     
     colNames:['ID', 'Title', 'Assigned To', 'Assigned', 'Due', 'Completed'], 
     colModel:[ 
      {name:'id', label:'ID', jsonmap:'id', hidden: true, editrules: { edithidden: true }}, 
      {name:'title', jsonmap:'title', editable: true}, 
      {name:'assignedto', label:'Assigned To', jsonmap:'assignedto', editable: true}, 
      {name:'assigned', jsonmap:'assigned', editable: true}, 
      {name:'due', jsonmap:'due', editable: true}, 
      {name:'completed', jsonmap:'completed', editable: true} 
     ], 
     jsonReader: { 
      repeatitems: false 
     } 
    }); 
}); 
+0

こんにちは、ソリューションファイルを共有することは可能でしょうか?私はJaryrockとJqgridを使って成功しなかったが、何日も努力し続けてきた。 – Josh

+0

こんにちは、実際にはJSONを使っていないので、XMLを使用することになりました。あなたがそれに興味があるなら、私は何かをオンラインで入れることができます。 Jayrock/JSONについては、このようにすることができると私に示唆されました:http://forums.asp.net/t/1430017.aspx – wprl

答えて

2

いいえ、あなたはjsonReaderでこれを行うことはできません。内部的には、グリッドは:

 ts.p.page = data[ts.p.jsonReader.page]; 

...ドット付きサブプロパティでは機能しません。

代わりに、データ型を関数に設定してグリッドデータを手動で取得する必要があります。 $ .ajaxを使ってデータを取得し、grid.addJsonDataを呼び出すことができます。グリッドと同様ですが、応答全体を渡すのではなく、応答のサブプロパティを渡します。

+0

あなたはそれがうまくいくと思いますよね?あなたはこれまでに似たようなことをしましたか私が何かを逃していない限り、私のために働くようには思われません。 – wprl

+0

私はjsonReaderを設定しますが、そうはしません。私はソースをチェックし、問題を見ることができます。私は更新します。 –

+0

ありがとう。今回は$ .ajax表記がASP.NETの一部だと思っていました。私のように見えますし、jQueryのドキュメントには一人で時間が必要です! – wprl

1

この投稿とリンクは本当に役に立ちました。 私は、これはまだどのように機能するかについて明確に理解を持っていないが、私は、私はちょうど誰かが自分の痛みを和らげるためにこれを投稿だろうと思った:)

これはgetRecordsからの戻りJSONです:

{ "id": - 1、 "result":{"ページ": "1"、 "合計": "1"、 "レコード": "2"、 "行":[{"" id ":" 13 " "invoke": "2007-10-06"、 "name": "クライアント 3"、 "amount": "1000.00"、 "tax": "0.00"、 "total": "1000.00"、 "note" 「金額」:「700.00」、「税」:「140.00」、「金額」、「金額」、「金額」、「金額」、 、 "total": "840.00"、 "note": "no tax"}]}}

そして、これは、作業コードです:

jQuery(document).ready(function(){ 
    jQuery("#list4").jqGrid({ 
     contentType: "text/plain; charset=utf-8", 
     datatype: function(postdata) 
     { 
      $.ajax({ 
       url: 'http://localhost/Booga/Baba.ashx/getRecords', 
       data: "{}", // For empty input data use "{}", 
       dataType: "json", 
       type: "GET", 
       contentType: "application/json; charset=utf-8", 
       complete: function(response, status) 
       { 
        if(status=='success') 
        { 
         var mygrid = jQuery("#list4")[0]; 
         var o = eval("(" + response.responseText + ")");// TODO don't use eval. it's insecure, but older browsers support it... 
         mygrid.addJSONData(o.result); 
        } 
       } 
      }) 
     },     
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], 
    colModel:[ 
     {name:'id',index:'id', width:55}, 
     {name:'invdate',index:'invdate', width:90, jsonmap:"invdate"}, 
     {name:'name',index:'name asc, invdate', width:100}, 
     {name:'amount',index:'amount', width:80, align:"right"}, 
     {name:'tax',index:'tax', width:80, align:"right"},  
     {name:'total',index:'total', width:80,align:"right"},  
     {name:'note',index:'note', width:150, sortable:false}  
    ], 
     jsonReader: { 
      repeatitems: false 
     } 
    }); 
}); 

ところでevalのを使用することは安全で、なぜ、誰もが知っているのですか?私のコードのコメントを見てください。私はforum.aspのリンクからその部分を手に入れました。

1

e.e.e. JSONの周りに "{id: ' - 1'、 'result':{/ * ... snip ... * /}}"ラッパーを追加します。

これは、JayRockがSMD応答を処理する方法の副作用です。「id」は「応答ID」であり、非同期通信の援助です。

あなたが非同期リクエストを一掃して(そして応答を待たずに)、「リクエストID」を指定すると、JayRockがそれを尊重します...そうすれば、応答を並べることができます要求と一緒に。

少し意味があると思います。

関連する問題