2014-07-25 113 views
0

我有一個jqGrid控件,其中包括一個下拉列表字段。列表中的項目來自服務器端使用ajax的方法,但我不確定如何構建返回的json以使其與網格兼容。我看着this question並根據答案,好像電網預計,下拉菜單的格式如下:jqGrid初始化DropDownList項目

[value] : [display text]

我是比較新的JavaScript和我不知道什麼類型的數據,這是(我假設它是一個鍵值對),所以我不知道如何從我的json對象中創建這種類型的數組。這是我試過的:

function populateTable(){ 
    $.ajax({ 
     type: "POST", 
     url: "MyHttpHandler.ashx", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (result) { 
      var jsonObject = jQuery.parseJSON(result.d); 

      var dropdpwnvalues = new[]; 

      for(var i = 0; i< jsonObject.length; i++){ 
       dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name }); 
      } 

      // The rest of the function 
    ); 
} 

dropdpwnvalues變量是綁定到網格的變量。需要注意的是jsonObject確實有它的idname,但是這句法

dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name }); 

顯然是不正確。任何想法如何從這個json對象中創建列表?

+0

dropdpwnvalues.push({value:jsonObject [i] .id,displayText:jsonObject [i] .name}); ? – Joe

+0

我想你在當前的代碼中犯了很多錯誤。例如'var jsonObject = jQuery.parseJSON(result.d);'行顯示你不需要**將返回的** Object **數據轉換爲'String'。而不是你應該從''MyHttpHandler.ashx''方法返回** Object **。 .NET Framework將自動將序列化爲JSON *。 '.ajax'會將JSON中的數據反序列化爲對象,並且'result.d'將成爲您可以直接使用的對象。不需要顯式調用'jQuery.parseJSON'。 – Oleg

+0

你發佈的關於jqGrid的信息太少了,因此我不得不猜測。您可能會遇到其他問題,因爲使用**填充網格數據的格式意味着您在用於填充網格的數據中使用了ID。這意味着你需要使用'formatter:「select」'將數據顯示爲文本(名稱而不是id)。在從服務器返回填充網格的數據之前,必須先設置editoptions.value或formatoptions.value **,這一點很重要,將由jqGrid處理。有關詳細信息,請參見[答案](http://stackoverflow.com/a/19427444/315935)。 – Oleg

回答

1

我想做到這一點最簡單的方法是通過創建一個字符串,而不是一個對象數組:

var sessionStream = "" 

for (var i = 0; i < sessions.length; i++) { 
    sessionStream += sessions[i].id + ":" + sessions[i].name + ";"; 
} 

// Remove the trailing ';' in the stream 
sessionStream = sessionStream.substring(0, sessionStream.length - 1); 

我原本以爲網格正在尋找一份清單。它可以綁定到一個字符串就好了。

0

您需要在以下格式返回選擇列表中的JSON值:

{1:'One',2:'Two'} 

,我相信你在jqGrid的的loadcomplete事件中使用此。因此,要設置JSON值只是作爲,

loadcomplete : function(){  
     $.ajax({ 
      type: "POST", 
      url: "MyHttpHandler.ashx", 
      dataType: "json", 
      success : function (result) { 
        $("#gridId").setColProp('columnName', { editoptions: { value: result}}); 
        } 
      }); 
      } 
+0

服務器上的序列化程序返回一個字符串,而不是一個對象。 – PoweredByOrange