2011-06-09 89 views
3

我有一個wcf服務爲大量的報告,返回json數據到我的jqgrid。一切按預期工作。但是,由於每個報表查詢都有大量的用戶輸入,我選擇使用與我在服務器上設置的系列「輸入模型」相匹配的json字符串。我不想在我的路線中混淆冗長的複雜查詢字符串。在jqGrid上設置Url loadBeforeSend

問題:如何添加jqGrid查詢字符串參數做我的json字符串我上傳到服務器?我試過'loadBeforeSend',但我似乎無法重寫ajax url。我無法使用url參數的函數,因爲網格參數尚不可用。有任何想法嗎?謝謝。

我jqGrid的功能(簡稱爲簡潔起見):

function loadGrid() { 
     var tbl = $('#tbl'); 
     tbl.jqGrid({ 
      loadBeforeSend: function() { 
       var ai = { 
        dateFrom: dbDateTime($('#at-datefrom').val()), 
        dateTo: dbDateTime($('#at-dateto').val()), 
        sidx: tbl.getGridParam('sortname'), 
        sord: tbl.getGridParam('sortorder'), 
        page: tbl.getGridParam('page'), 
        rows: tbl.getGridParam('rowNum') 
       }; 
       var newUrl = getBaseURL() + 'ReportingService.svc/report/?json=' + JSON.stringify(ai); 
       tbl.jqGrid().setGridParam({ url: newUrl });//Everything works perfect up to this point. All the values are in my json string and my url is correct. 
      }, 
      url: '', //Empty because I need to override it 
      datatype: 'json', 
      mtype: 'GET', 
      ajaxGridOptions: { contentType: 'application/json' }, 
      loadError: function (xhr, status, error) { alert(status + "" + error); } 
     }).navGrid('#attendance-pager', { edit: false, add: false, del: false }); 
    } 

回答

2

如果您使用mtype: 'GET'和neew只是設置附加參數將被附加到URL,您可以使用jqGrid的postData參數。如果將postData定義爲函數,則將獲得最佳結果(有關詳細信息,請參見here)。

還有一個方法是使用beforeRequest其中this將被設置到電網DOM元素,你可以爲每個this.p.url訪問(如果需要改變)的jqGrid的url參數。您當然可以使用$(this).jqGrid('setGridParam','url',yourNewUrl);而不是直接更改this.p.url

我不建議你在你的情況下使用datatype作爲函數。順便說一下,如果使用datatype作爲功能,則不能使用beforeRequest

+0

爲什麼你不推薦使用數據類型函數?到目前爲止,它一直在爲我工作。感謝Oleg。 – trevorc 2011-06-14 20:52:24

+0

@nameEqualsPNamePrubeGoldberg:您的問題的答案可能會很長。這種方式有許多缺點。主要原因是有更直接的方式,你不使用。你的問題就像一個問題,爲什麼你應該使用鑰匙到門上,而不是使用窗口。答案是:因爲你有門的鑰匙,而門是通過門設計的方式。這是最直接和最簡單的方法。你之前通過窗戶進入了房子,它工作。好的,但通過窗戶的方式只能用於極端情況,而不能用於有序情況。 – Oleg 2011-06-14 21:01:57

+0

@nameEqualsPNamePrubeGoldberg:jqGrid旨在讀取XML數據和幾乎任何類型的JSON數據。如果你有其他類型的數據,你應該使用數據類型作爲函數。 – Oleg 2011-06-14 21:05:59

0

我討厭回答我的問題,但這個answer馬修提供完美的作品。這個問題有點模棱兩可,但無論如何。

簡而言之,您需要從'datatype'參數中調用外部ajax函數。因爲jqGrid現在被加載(儘管沒有任何數據),你可以從用戶輸入(即記錄集的頁面3,'desc'等)捕獲參數數據並將其添加到你的json字符串中。

這使得您的服務中一個真正簡單的uri路線。希望這可以幫助某人。