首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion 9、JSON和jQuery EasyUI

ColdFusion 9、JSON和jQuery EasyUI
EN

Stack Overflow用户
提问于 2014-03-04 14:22:35
回答 2查看 756关注 0票数 4

我正在尝试将一个ColdFusion查询输出到JSON,以便它可以与jQuery EasyUI (特别是一个数据)一起使用。

从.json附带的EasyUI文件示例来看,这是他们正在寻找的格式.

代码语言:javascript
复制
{"total":2
  , "rows":[ 
            { "productid":"FI-SW-01"
              , "productname":"Koi"
              , "unitcost":10.00
              , "status":"P"
              , "listprice":36.50,"attr1":"Large"
              , "itemid":"EST-1"
             }
          , { "productid":"K9-DL-01"
             , "productname":"Dalmation"
             , "unitcost":12.00 
             , "status":"P"
             , "listprice":18.50
             , "attr1":"Spotted Adult Female"
             , "itemid":"EST-10"
            }
        ]
 }

然而,当我在一个SerializeJSON(emails)查询中使用ColdFusion时,我得到如下信息:

代码语言:javascript
复制
{ "COLUMNS":["CUSTOMERID","CUSTOMERFIRSTNAME"]
   , "DATA":[
               [101,"Bhavin"],[102,"Frank"]
            ]
}

这似乎没有得到EasyUI的认可,所以我猜问题是:(1) EasyUI是否应该能够识别并处理来自ColdFusion的输出,如所示,或者(2)是否有一种方法可以使ColdFusion以类似于EasyUI示例中包含的格式输出JSON?

更新:

如果我使用serializeQueryByColumns参数,情况就是这样:

代码语言:javascript
复制
{ "ROWCOUNT":83
  , "COLUMNS":["CUSTOMERID","CUSTOMERFIRSTNAME"]
  , "DATA":{
            "CUSTOMERID":[101,102]
            ,"CUSTOMERFIRSTNAME":["Bhavin","Frank","]
            }
}

尽管如此,EasyUI仍未识别。在他们的文档中,他们展示了一个类似于下面的php示例,所以我想我将尝试用ColdFusion复制它的输出:

代码语言:javascript
复制
$rs = mysql_query('select * from users');
$result = array();
while($row = mysql_fetch_object($rs)){
    array_push($result, $row);
}

echo json_encode($result);

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 01:18:49

数据集的loadFilter函数可以将任何数据转换成标准的数据格式,这些数据格式可以加载到数据集中。

代码语言:javascript
复制
<script>
var data = { "ROWCOUNT":83
  , "COLUMNS":["CUSTOMERID","CUSTOMERFIRSTNAME"]
  , "DATA":{
            "CUSTOMERID":[101,102]
            ,"CUSTOMERFIRSTNAME":["Bhavin","Frank"]
            }
};
function myLoadFilter(data){
    var result = {total:data.ROWCOUNT};
    var rows = [];
    var count = data.DATA[data.COLUMNS[0]].length;
    for(var i=0; i<count; i++){
        var row = {};
        $.map(data.COLUMNS, function(field){
            row[field] = data.DATA[field][i];
        })
        rows.push(row);
    }
    result.rows = rows;
    return result;
}
</script>

数据组件可以声明为:

代码语言:javascript
复制
    <table class="easyui-datagrid" title="Basic DataGrid" style="width:700px;height:250px"
        data-options="
            singleSelect:true,
            collapsible:true,
            data:data,
            loadFilter:myLoadFilter
        ">
    <thead>
        <tr>
            <th data-options="field:'CUSTOMERID',width:100">CUSTOMERID</th>
            <th data-options="field:'CUSTOMERFIRSTNAME',width:200">CUSTOMERFIRSTNAME</th>
        </tr>
    </thead>
</table>

此示例可从http://jsfiddle.net/d8zYy/获得。

票数 6
EN

Stack Overflow用户

发布于 2014-03-04 14:51:17

它看起来不像是EasyUI DataGris将接受数据的自定义格式(这是一个遗憾,因为数据集看起来非常好,除此之外)

将CF查询转换为EasyUI的正确格式应该是简单的:

  • 创建一个结构来保存数据
  • 设置struct.total=query.RecordCount (如果这是它想要的话)。对于远程分页,它更有可能是总的结果,而不管当前页面是什么)
  • 集struct.rows=ArrayNew(1)
  • 循环查询(<cfloop query='myQuery'> )
  • 创建一个新的结构,rowData
  • 循环遍历字段('myQuery.columnList')
  • 设置struct.columnName =myQuery‘’columnName‘
  • ArrayAppend(struct.rows,rowData)
  • 返回结构

我开始怀疑写上面的清单只需要写实际的功能.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22174567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档