2012-03-27 158 views
1

在jqGrid中顯示我的json數據時遇到了麻煩。在jqGrid中加載JSON數據

我在這個論壇上搜索了很多,並嘗試過各種形式使它工作。我很抱歉,如果這已經得到解答,但我真的需要幫助。

在服務器頁面我只是用JavaScriptSerializer發送數據和jsonreader函數的默認參數(這個工作確定)。

我現在需要進行分頁,並改變了我的服務器網頁代碼與SIDXSORD參數工作。

從服務器生成的字符串如下所示:

{"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 }); 
+1

您的代碼中的主要錯誤是使用'jsonreader'而不是'jsonReader'。你可以刪除所有'jsonmap'屬性和'index'。我建議你另外不要使用像''https:// server/handlerpage.ashx'這樣的'url'。對應於Ajax [相同來源策略](http://en.wikipedia.org/wiki/Same_origin_policy),您必須使用與當前頁面相同的「https:// server /」前綴。所以你最好使用'url:'handlerpage.ashx''或'url:'/ handlerpage.ashx''。 – Oleg 2012-03-27 19:48:03

+0

謝謝Oleg,我測試了jsonReader(大寫R),它確實有效。也改變了網址以遵守政策並且也工作。 – fabianmunoz 2012-03-27 21:02:56

+0

不客氣!有時候錯誤非常小(只有一個字母),但正因爲如此,可能很難找到它。 – Oleg 2012-03-27 21:09:35

回答

0

請確保服務器端腳本與HEADERS

返回適當的JSON字符串

進一步檢查demo網站和JSON示例

+0

我試過應用程序/ json和text/json,但沒有解決我的問題。我也嘗試過文本/純文本(這是第一次在分頁之前工作),但也沒有效果。有趣的是,分頁欄工作正常,我可以看到頁面數量並更改它們,就像網格不想讀取服務器響應的根部分。 – fabianmunoz 2012-03-27 17:53:05

+0

我用過:text/plain,text/json,application/json,它們在更改jsronReader後都工作。謝謝。 – fabianmunoz 2012-03-27 18:40:46

1

嘗試使用以下

jsonReader: { 
    root: 'rows', 
    page: 'page', 
    total: 'total', 
    records: 'records', 
    repeatitems: true, 
    cell: 'cell', 
    id: 'id', 
    userdata: 'userdata' 
} 
+0

這也沒有工作。我想知道'root':[{...}]是否是錯誤的,當我在jsonReader中更改根標記'rows'或其他值時,網格會顯示加載字符串並停留在那裏。 – fabianmunoz 2012-03-27 18:21:24

+0

我改變了一點,它的工作:jsonReader:{根:「行」,頁:「頁面」,總:「總」,記載:「記錄」,repeatitems:假的,ID:「身份證」}謝謝兩位種子 – fabianmunoz 2012-03-27 18:39:13

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"]}]}

沒有在文檔頁面上給出示例,但如果您的網格中只有兩列,則上述內容正確。您需要讓服務器查詢/解析服務器查詢,並將值傳遞給運行服務器端腳本的頁面以返回此格式。文檔中的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警告作爲響應的一部分返回