如何使用jQuery解析记录集?

时间:2011-11-21 20:27:17

标签: jquery coldfusion

我正在使用ColdFusion 9.0.1和jQuery 1.6.2。

我正在使用CFAJAXPROXY和jQuery进行调用:

var jro = new jsApp();
MyResults = jro.getProductPricing(CustomerID, OrderID, ProductID);

我总会得到一个结果。以下是我得到的结果示例:

{"COLUMNS":["PRICE","POINTS","BV","DESCRIPTION"],"DATA":[[14.990000,6.8,6.00,"CLEAR VANILLA 11OZ-325ML"]]}

当我得到这个结果时,我需要解析它并在页面中填充跨度。

我从未试图像这样解析JSON。这似乎解析起来应该很简单,但我看到的每一个例子都让它看起来像火箭科学。如何使用jQuery获取PRICE,POINTS,BV和DESCRIPTION列?这样做有什么不好的方法吗?什么是好方法?

3 个答案:

答案 0 :(得分:1)

在调用Web服务之前可以调用setQueryFormat('column'),以便生成的JSON对象更容易访问或操作,但是这样做的缺点是生成的JSON字符串会更大,因为列名重复对于记录集中的每个记录。

  

如果您使用cfajaxproxy标记并调用代理对象   setQueryFormat函数,参数值为ColdFusion列   客户端绑定和代理代码不转换列格式数据   到HTML网格直接使用的JavaScript。但是,使用   这种格式带有cfajaxproxy标签,因为你可以参考   直接使用列名返回数据。例如,如果是   CFC函数返回一个包含用户数据的查询,您将获得用户名   通过指定userData.firstName[0]和{}等值来实现JavaScript   userData.lastName[0]

CF Dev Doc:使用数据交换格式 - > Controlling CFC remote return value data format

答案 1 :(得分:0)

它看起来像一个格式良好的JSON对象,可以轻松访问。如果它是一个字符串形式,那么你可以使用$.pareseJSON()方法将字符串解析为JSON对象。

答案 2 :(得分:0)

此代码假定MyResults是JS对象,而不是JSON字符串。如果你还没有将JSON反序列化为JS对象,那么就像ShankarSangoli建议并首先通过parseJSON运行它:MyResults = $ .parseJSON(MyResults);

queryIndex = new Object();
for (var i = 0; i < MyResults["COLUMNS"].length; i++)
{
    queryIndex[MyResults["COLUMNS"][i]] = i;
}

for (i = 0; i < MyResults["DATA"].length; i++)
{
    $('span#foo').text('Price: '+ MyResults["DATA"][i][queryIndex["PRICE"]]);
    $('span#bar').text('POINTS: '+ MyResults["DATA"][i][queryIndex["POINTS"]]);
    // etc....

}