$ .ajax ColdFusion cfc JSON Hello World
我尽可能地简化了这个例子。 我有一个远程function:
SELECT PersonID,FirstName,LastName FROM Person
使用jQuery $ .ajax方法,我想制作一个无序的每个人列表。
google.load("jquery", "1"); jQuery(function($){ $.ajax({ url: "Remote/Person.cfc?method=Read&ReturnFormat=json", success: function(data){ var str = ''; // This is where I need help: for (var I=0; I<data.length; I++) { str += '- ' + I + data[I][1]+ '
' } str += '
'; $('body').html(str); }, error: function(ErrorMsg){ console.log("Error"); } }); });
我丢失的部分是我循环数据的地方。 我更喜欢使用jQuery $ .ajax方法,因为我知道$ .get和$ .post没有错误捕获。
我不知道如何处理从cfc返回的JSON。
看起来结果是json格式(请查看文档http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html )。 “如果指定returnformat =”json“并且函数返回一个查询,ColdFusion会将查询序列化为一个JSON对象,其中包含两个条目,列名数组和一列列数据数组。有关更多信息,请参阅SerializeJSON。” http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_f_21.html
所以第一个数组(data.COLUMNS应该是一个列名数组.data.COLUMNS [0]会给你第一列的名称.data.DATA [0]会给你第一行查询。
一个很好的技巧是在chrome或firebug控制台中使用console.log(data)来查看其结构化forms的数据。
我没有测试过这个,但它应该很接近。 只需从数据中生成基本表。
$.ajax({ url: 'Remote/Person.cfc?method=Read&ReturnFormat=json', dataType: 'json', success: function(response) { var str = ''; var i; var j; //loop over each column name for headers for (i = 0; i < response.COLUMNS.length; i++) { str += '' + response.COLUMNS[i] + ' '; } } str += ' '; //loop over each row for (i = 0; i < response.DATA.length; i++) { str += ''; //loop over each column for (j = 0; j < response.DATA[i].length; j++) { str += '' + response.DATA[i][j] + ' '; } str += ' '; } str += '
'; $('body').html(str); }, error: function(ErrorMsg) { console.log('Error'); } });
最简单的方法是直观地了解返回的JSON数据的结构。 那么横向JS对象应该不会太难。 你试过JSON Visualization吗? http://chris.photobooks.com/json/default.htm
如果你需要的只是PersonID,你也可以从CF返回PersonID的数组或列表。
或者,您可以选择CF返回纯文本,并生成所有
。 通过ajax传递的消息会更大,但是你需要维护的JS代码更少。 CFML更容易维护,对吧? 🙂
我对ColdFusion不是很熟悉,但你尝试过将数据类型设置为JSON吗?
$.ajax({ url: 'Remote/Person.cfc?method=Read&ReturnFormat=json', dataType: 'json', success: function(response) { var data = response.DATA; var str = ''; for (var I = 0; I < data.length; I++) { str += '- ' + I + data[I][1] + '
'; } str += '
'; $('body').html(str); }, error: function(ErrorMsg) { console.log('Error'); } });
如果你回来的数据类似于:
[["PersonID1", "FirstName1", "LastName1"],["PeronID2", "FirstName2", "LastName2"]] .. etc
如果您可以显示请求返回的原始JSON数据,则上述方法无效,我应该能够轻松修复它。
此外,不确定它是否在您的代码中,但您在for循环中的行末尾错过了分号。
选项:
在你的情况下我会放
但
这与returntype="string" returnformat="plain" +
,这是jQuery观点的一个问题,因为即使你按列使用serializeJSON srerialization,你也会得到丑陋的JSON。
- 您可以通过cfloop和concatenation手动创建JSON字符串:/
- 使用cfjson.cfc覆盖serializeJSON
- 转到Ben Nadel的网站并使用他的toJSON方法并以某种方式修改它以满足您的需求
其他的东西是serializeJSON,返回大写的键,所以要注意,在js中使用lcase()或写.LIKETHIS。
PS:尝试使用jQuery中的html动态创建:
var someLiElement = $('').addClass('custom_class') .text('Foo bar') .attr('id', 'custom_id' + someInteger)
然后将方法附加到父元素