我正在使用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列?这样做有什么不好的方法吗?什么是好方法?
答案 0 :(得分:1)
在调用Web服务之前可以调用setQueryFormat('column')
,以便生成的JSON对象更容易访问或操作,但是这样做的缺点是生成的JSON字符串会更大,因为列名重复对于记录集中的每个记录。
如果您使用cfajaxproxy标记并调用代理对象 setQueryFormat函数,参数值为ColdFusion列 客户端绑定和代理代码不转换列格式数据 到HTML网格直接使用的JavaScript。但是,使用 这种格式带有cfajaxproxy标签,因为你可以参考 直接使用列名返回数据。例如,如果是 CFC函数返回一个包含用户数据的查询,您将获得用户名 通过指定
userData.firstName[0]
和{}等值来实现JavaScriptuserData.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....
}