2013-02-20 117 views
1

我正在使用jqGrid并希望使用从ColdFusion返回的ajax来构建colModel数组。如何将AJAX返回的字符串转换为javascript数组对象

当我在下面的客户端上创建数组cm时,这可以工作。

function subTab(obj,id,tab){ 
var param={id:id,tab:tab} 
http('POST','cfc/view/'+obj+'.cfc?method=view',subTab_RTN,param); 
} 
function subTab_RTN(obj){ 
$("#detail").html(obj.html); 
if(obj.grid.display){ 
var cm; 
switch(obj.grid.tab){ 
case "docs": 
cm=[{name:'contactID',index:'contactID',hidden:true}, 
{name:'docName',index:'docName',width:200,label:'Document Name'}, 
{name:'docType',index:'docType',width:200,label:'Document Type'}, 
{name:'campaign',index:'campaign',width:200,label:'Campaign'}, 
{name:'campaignCode',index:'campaignCode',width:125,label:'Campaign Code'}, 
{name:'campaignType',index:'campaignType',width:125,label:'Campaign Type'}, 
{name:'downloadDate',index:'downloadDate',width:125,label:'Download  Date',formatter:'date'}]; 
break; 
} 
$("#subTabGridTbl").jqGrid({ 
url:obj.grid.url, 
datatype: "json", 
colModel:cm, 
... 

我不过喜欢创建像在服务器上的阵列:

<cfset rtn.grid.cols="[{name:'contactID',index:'contactID',hidden:true}, 
{name:'docName',index:'docName',width:200,label:'Document Name'}, 
{name:'docType',index:'docType',width:200,label:'Document Type'}, 
{name:'campaign',index:'campaign',width:200,label:'Campaign'}, 
{name:'campaignCode',index:'campaignCode',width:125,label:'Campaign Code'}, 
{name:'campaignType',index:'campaignType',width:125,label:'Campaign Type'}, 
{name:'downloadDate',index:'downloadDate',width:125,label:'Download Date',formatter:'date'}]" /> 

,然后使用返回的OBJ(obj.grid.cols)构建阵列。

感谢您的帮助。 Gary

+0

使其有效JSON,然后将其解析为JS对象。 – Blender 2013-02-20 00:22:33

回答

3

JSON.parse()supported在大多数主流浏览器中。如果您需要支持IE7及以下版本,我相信您可以使用jQuery.parseJSON()获得相同的结果。两种方法都需要格式正确的JSON字符串。另外,我建议将你的数组作为本地CF数组结构体,然后使用serializeJSON()将它转换为JSON字符串。这将有助于尽量减少您尝试手动编写JSON字符串时遇到的任何问题。

+0

感谢Sean和所有人,使其有效JSON并使用jQuery.parseJSON()使它工作。将数组构建为一个CF数组结构是一个好主意,并且可以帮助我使用其他网格。唯一的“难题”是我在创建结构时不得不使用数组符号。点符号做出了不被jqGrid识别的键UPPER情况。 – garyv 2013-02-20 01:21:29

+1

更好的解决方案(恕我直言):http('POST','cfc/view /'+ obj +'.cfc?method = view&returnFormat = json',subTab_RTN,param);然后让CFC方法简单地返回结构数组。这样,如果你碰巧需要在内部调用相同的方法,你将得到一个ColdFusion数组,而不是一个JSON字符串。 – 2013-02-20 04:24:44

相关问题