2015-09-06 61 views
0

請幫忙。我有搜索舊的問題,但無法找到相關的解決方案。JQGrid - 網格顯示但數據不加載

點擊網格顯示按鈕,但沒有數據加載。

我的網站的回覆:

{"d":"{"totalpages":2,"currpage":1,"totalrecords":15,"rows":[{"id":"110","cell":["110","perform action 1"]},{"id":"112","cell":["112","perform action 2"]},...]}"} 

我jQuery代碼:

$("#b4").click(function() {doAjax4();}); 

    function doAjax4() { 
     $.ajax({ 
      async: false, cache: false, 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: "WebAction.aspx/GetDataTable", 
      data: "{}", 
      datatype: "json", 
      success: function (data) { 
       $("#mygrid1").jqGrid({ 
        dataType: "json", 
        type: "POST", 
        colNames: ['runid', 'action'], 
        colModel: [{ name: 'runid', index: 'runid' }, { name: 'action', index: 'action' }], 
        jsonReader: { 
         root: "rows", 
         page: "currpage", 
         total: "totalpages", 
         records: "totalrecords", 
         id: "id", 
         cell: "cell", 
         repeatitems: true 
        }, 
        loadonce: true, 
        viewrecords: true, 
        gridview: true, 
        rowList: [5, 10, 50], 
        caption: "Action Table", 
        height: 'auto', 
        //pager: '#pager', 
        emptyrecords: 'No data for the applied filter' 
       }); 
      }, 
      error: function (xhr, type, exception) { 
       alert(xhr.statusText); 
      } 
     }) 
    } 

回答

0

我看到你的代碼中的許多問題:

  • 中的d屬性的類型值服務器響應是字符串。所以我想你在Web服務GetDataTable中做了一個典型的初學者錯誤:你在代碼中直接包含了不需要的轉換爲JSON。正確的將返回對象GetDataTable而不是字符串
  • 您在$.ajax中使用datatype: "json"參數,但應該使用dataType: "json"代替。 jqGrid中close選項的名稱是datatype,但$.ajax中的名稱是dataType
  • 您使用不需要的參數async: false,我建議您刪除它。
  • 你在click處理程序裏面調用doAjax4。函數doAjax4通過執行代碼$("#mygrid1").jqGrid({ ...})創建success處理程序的內部網格; (「#mygrid1」)。trigger(「reloadGrid」); instead of $(「#mygrid1」)。jqGrid({...});。解決該問題的另一種方法將包括調用GridUnload方法之前$("#mygrid1").jqGrid({ ...});`。如果它存在,它會破壞現有的電網。
  • jqGrid的選項包含dataType: "json"參數而不是datatype: "json",所以jqGrid使用默認選項datatype: "xml",這可能不是你想要的。以同樣的方式,您可以使用存在於$.ajax但未在jqGrid中的未知選項type: "POST"。您應該將選項名稱從type修復爲mtype。如果你想讓那個jqGrid發出HTTP POST請求,那麼你應該指定url參數(例如url: "WebAction.aspx/GetDataTable"
  • 在第一個Ajax調用中返回的data將被忽略。如果你想要jqGrid使用你以前下載的data,那麼你應該使用例如datatype: "jsonstring", datastr: data.d。它將對應您當前的數據格式。
+0

感謝您的快速回復和詳細的答案。 **所做的更改 - 它使用jsonstring工作,但我想使用數據類型:「json」&jsonReader。是否有可能或者是方法錯**
更正: 1.現在返回GetDataTable對象 2.錯字更正爲數據類型: 「JSON」 3.刪除異步:假 4。在成功之前,$(「#mygrid1」)。jqGrid({...});添加$(「#mygrid1」)。trigger('reloadGrid'); \t 5. jqgrid選項(a)錯誤更正爲數據類型:「json」。 (b)錯字更正爲mtype。 (c)添加url:「WebAction.aspx/GetDataTable」 6.設置數據類型:「jsonstring」,datastr:data.d. –

+0

@BipoK:不客氣!您可以刪除外部'$ .ajax',並使用帶有選項''datatype:「json」,mtype:「POST」,url:「WebAction.aspx/GetDataTable」的jqGrid。你只需要改變'jsonReader'在所有頂層元素中使用'd.'前綴:'jsonReader:{page:「d.currpage」,total:「d.totalpages」,records:「d.totalrecords」,root:「 d.rows「}' – Oleg

+0

再次感謝您。您在這裏和其他許多SO中的回覆總是有幫助的。您的答案提供瞭解決方案。我還必須添加2個附加選項。這個用法是否正確?添加的選項是[1]'ajaxGridOptions:{contentType:'application/json; charset = utf-8'}'和[2]'serializeGridData:function(postdata){return null;}' –