2011-05-12 20 views
2

我一直在尝试将数组从全局变量(codata)传递到editoptions(jqGrid)的选项数组。我的代码表示如下:未通过jqGrid的editoptions参数的数组(json)

--------- countries_list.php引发以下JSON数组-----------

["ABU","AD","AE","AF" .... "ZA","ZM","ZW"] 

----- ----使用jqGrid代码的PHP脚本----------

jQuery(document).ready(function(){ 

      var codata = new Array(); 

      $.getJSON('countries_list.php', function(list){ 
       $.each(list, function(val) { 
        codata.push("'"+val+"'"); 
        # --- Here alert() displays 'codata' with all the elements --- 
       }); 
      }); 

      $("#datatable").jqGrid({ 
       ...... 
       // some code until colMode specs 
       ...... 
       { name:'guco', 
         index:'guco', 
         edittype:'select', 
         width:90, 
         editable: true, 
         editoptions: { 
          formatter:'select', 
          value: codata # --- array is not passed, it comes empty --- 
         }, 
         sortable: true, 
         resizable: false 
        }, 
     ..... 

---------使用jqGrid代码的PHP脚本----------

任何提示如何得到这个固定?,thanx提前。

马里奥Benitez.-

回答

0

从我看到你的PHP脚本是通过有效的JS数组,而不是JSON对象。最逻辑的事情就是打电话jqGrid的Ajax回调分配$("#datatable").jqGrid({ ... editoptions: { value: list } ... });

+0

异步操作可能会导致将数据存储在数组中的问题 – 2011-05-12 19:32:14

+0

事实上,因为它是异步'codata'是未定义的,因此您引用它的时间并且是回调函数。 – Zlatev 2011-05-13 08:19:13

0

里面我会建议你用buildSelect而不是editoptionsvalue一起使用dataUrl。您可以在the answer的“UPDATED”部分找到相应的代码示例buildSelect

+0

我会保留'答案'链接,因为我将在不久的将来需要。我会发布解决方案。 – 2011-05-12 19:34:52

2

感谢各位,我对你们的贡献了解了很多。问题是固定的,如下所示:

(阅读),我发现的getJSON工作的“异步模式”(我是一个jQuery的新手)和代码来解决这个问题是:

jQuery(document).ready(function(){ 

     var codata = (function() { 
      var list = null; 

      $.ajax({ 
       'async': false, 
       'global': false, 
       'url': 'countries_list.php', 
       'dataType': 'json', 
       'success': function (data) { 
        list = data; 
       } 
      }); 

      return list; 
     })(); 

     $("#datatable").jqGrid({ 
      ... jqGrid settings ... 
      colModel: [ 
       .... 
       { name:'guco', 
        index:'guco', 
        edittype:'select', 
        width:90, 
        editable: true, 
        editoptions: { 
         value: codata 
        }, 
        sortable: true, 
        resizable: false 
       }, 
       .... 

一个感谢名单很多次,我希望这有助于别人。

马里奥贝尼特斯。

0

我试过两种方法,并且Olegs链接中给出的答案有所帮助。使用buildSelect参数可以完全控制该值。当我使用值方法时,它分配了0 - n的简单整数值。你也可以在这个范例中分配你自己的CSS类。 +1为buildSelect/dataurl。