Jquery $.ajax ColdFusion cfc JSON Hello World
我已经尽可能地简化了这个例子。我有一个遥控功能:Jquery $.ajax ColdFusion cfc JSON Hello World,jquery,json,coldfusion,cfc,Jquery,Json,Coldfusion,Cfc,我已经尽可能地简化了这个例子。我有一个遥控功能: <cfcomponent output="false"> <cffunction name="Read" access="remote" output="false"> <cfset var local = {}> <cfquery name="local.qry" datasource="myDatasource"> SELECT PersonID,FirstName,L
<cfcomponent output="false">
<cffunction name="Read" access="remote" output="false">
<cfset var local = {}>
<cfquery name="local.qry" datasource="myDatasource">
SELECT PersonID,FirstName,LastName FROM Person
</cfquery>
<cfreturn local.qry>
</cffunction>
</cfcomponent>
使用jQuery$.ajax方法,我想创建一个无序的每个人的列表
<!DOCTYPE HTML>
<html>
<head>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1");
</script>
<script type="text/javascript">
jQuery(function($){
$.ajax({
url: "Remote/Person.cfc?method=Read&ReturnFormat=json",
success: function(data){
var str = '<ul>';
// This is where I need help:
for (var I=0; I<data.length; I++) {
str += '<li>' + I + data[I][1]+ '</li>'
}
str += '</ul>';
$('body').html(str);
},
error: function(ErrorMsg){
console.log("Error");
}
});
});
</script>
</head>
<body>
</body>
</html>
我丢失的部分是在数据上循环。
我更喜欢使用jQuery$.ajax方法,因为我知道$.get和$.post没有错误捕获
我不知道如何处理从cfc返回的JSON。我不太熟悉ColdFusion,但您是否尝试过将数据类型设置为JSON
$.ajax({
url: 'Remote/Person.cfc?method=Read&ReturnFormat=json',
dataType: 'json',
success: function(response) {
var data = response.DATA;
var str = '<ul>';
for (var I = 0; I < data.length; I++) {
str += '<li>' + I + data[I][1] + '</li>';
}
str += '</ul>';
$('body').html(str);
},
error: function(ErrorMsg) {
console.log('Error');
}
});
如果上述方法不起作用,如果您可以显示请求返回的原始JSON数据,我应该能够轻松地修复它
另外,不确定它是否在代码中,但在for循环的行末尾漏掉了一个分号。我不太熟悉ColdFusion,但您是否尝试过将数据类型设置为JSON
$.ajax({
url: 'Remote/Person.cfc?method=Read&ReturnFormat=json',
dataType: 'json',
success: function(response) {
var data = response.DATA;
var str = '<ul>';
for (var I = 0; I < data.length; I++) {
str += '<li>' + I + data[I][1] + '</li>';
}
str += '</ul>';
$('body').html(str);
},
error: function(ErrorMsg) {
console.log('Error');
}
});
如果上述方法不起作用,如果您可以显示请求返回的原始JSON数据,我应该能够轻松地修复它
另外,不确定它是否在代码中,但在for循环的行末尾漏掉了一个分号。最简单的方法是直观地查看返回的JSON数据的结构。那么横穿JS对象应该不会太难。你试过JSON可视化吗 如果您只需要PersonID,那么也可以从CF返回PersonID的数组或列表
或者,您可以要求CF返回纯文本,并生成所有的。通过ajax传递的消息会更大,但需要维护的JS代码会更少。CFML更容易维护,对吗 最简单的方法是直观地查看返回的JSON数据的结构。那么横穿JS对象应该不会太难。你试过JSON可视化吗 如果您只需要PersonID,那么也可以从CF返回PersonID的数组或列表 或者,您可以要求CF返回纯文本,并生成所有的。通过ajax传递的消息会更大,但需要维护的JS代码会更少。CFML更容易维护,对吗 选项: 在你的情况下,我会
<cffunction name="keywordAutoComplete" access="remote"
returntype="struct" returnformat="JSON" >
但是
这与returntype=string returnformat=plain+
从jQuery的角度来看,这是一个问题,因为即使使用按列序列化JSON,也会得到难看的JSON
您可以通过cfloop和连接手动生成JSON字符串:/
使用覆盖序列化JSON的cfjson.cfc
转到Ben Nadel的站点,使用他的toJSON方法,并以某种方式修改它以满足您的需要
另一件事是序列化JSON,返回大写键,所以请注意,使用lcase或write.LIKETHIS在js中
PS:在jQuery中尝试动态创建html:
var someLiElement = $('<li />').addClass('custom_class')
.text('Foo bar')
.attr('id', 'custom_id' + someInteger)
然后将方法附加到父元素选项:
在你的情况下,我会
<cffunction name="keywordAutoComplete" access="remote"
returntype="struct" returnformat="JSON" >
但是
这与returntype=string returnformat=plain+
从jQuery的角度来看,这是一个问题,因为即使使用按列序列化JSON,也会得到难看的JSON
您可以通过cfloop和连接手动生成JSON字符串:/
使用覆盖序列化JSON的cfjson.cfc
转到Ben Nadel的站点,使用他的toJSON方法,并以某种方式修改它以满足您的需要
另一件事是序列化JSON,返回大写键,所以请注意,使用lcase或write.LIKETHIS在js中
PS:在jQuery中尝试动态创建html:
var someLiElement = $('<li />').addClass('custom_class')
.text('Foo bar')
.attr('id', 'custom_id' + someInteger)
然后将append方法附加到父元素看起来结果是json格式的检查文档。 如果指定returnformat=json,并且函数返回查询,则ColdFusion会将查询序列化为一个json对象,其中包含两个条目、一个列名数组和一个列数据数组数组。有关更多信息,请参见序列化JSON 因此,第一个arraydata.COLUMNS应该是一个列名数组。data.COLUMNS[0]将为您提供第一列的名称。data.data[0]将为您提供查询的第一行 一个很好的技巧是在chrome或firebug控制台中使用console.logdata以结构化形式查看数据 我没有测试这个,但应该很接近。只是从数据中生成一个基本表
$.ajax({
url: 'Remote/Person.cfc?method=Read&ReturnFormat=json',
dataType: 'json',
success: function(response) {
var str = '<table><tr>';
var i;
var j;
//loop over each column name for headers
for (i = 0; i < response.COLUMNS.length; i++) {
str += '<th>' + response.COLUMNS[i] + '</th>';
}
}
str += '</tr>';
//loop over each row
for (i = 0; i < response.DATA.length; i++) {
str += '<tr>';
//loop over each column
for (j = 0; j < response.DATA[i].length; j++) {
str += '<td>' + response.DATA[i][j] + '</td>';
}
str += '</tr>';
}
str += '</table>';
$('body').html(str);
},
error: function(ErrorMsg) {
console.log('Error');
}
});
看起来结果是json格式的检查文档。 如果指定returnformat=json,并且函数返回查询,则ColdFusion会将查询序列化为一个json对象,其中包含两个条目、一个列名数组和一个列数据数组数组。有关更多信息,请参见序列化JSON 因此,第一个arraydata.COLUMNS应该是一个列名数组。data.COLUMNS[0]将为您提供第一列的名称。data.data[0]将为您提供查询的第一行 一个很好的技巧是在chrome或firebug控制台中使用console.logdata以结构化形式查看数据 我没有测试这个,但应该很接近。只是从数据中生成一个基本表
$.ajax({
url: 'Remote/Person.cfc?method=Read&ReturnFormat=json',
dataType: 'json',
success: function(response) {
var str = '<table><tr>';
var i;
var j;
//loop over each column name for headers
for (i = 0; i < response.COLUMNS.length; i++) {
str += '<th>' + response.COLUMNS[i] + '</th>';
}
}
str += '</tr>';
//loop over each row
for (i = 0; i < response.DATA.length; i++) {
str += '<tr>';
//loop over each column
for (j = 0; j < response.DATA[i].length; j++) {
str += '<td>' + response.DATA[i][j] + '</td>';
}
str += '</tr>';
}
str += '</table>';
$('body').html(str);
},
error: function(ErrorMsg) {
console.log('Error');
}
});
@anomareh[[PersonID1]、[FirstName1]、[LastName1],
['PeronID2'、'FirstName2'、'LastName2']]。。不是JSON,它是一个带漂亮括号的字符串;我反对双引号:p@anomareh[['PersonID1'、'FirstName1'、'LastName1']、['PeronID2'、'FirstName2'、'LastName2']]。。不是JSON,它是一个带漂亮括号的字符串;我有一件事反对双引号:感谢你抓住了丢失的分号。我得到的数据是:{COLUMNS:[PERSONID,FIRSTNAME,LASTNAME],数据:[[1001,Scott,Wimmer],[1002,Phillip,Senn],[1003,Paul,Nielsen]}另外,我不知道为什么,但是现在正在执行错误条件,而不是成功条件。@cf_Phillipsen尝试我的编辑。如果它仍然执行错误条件console.logErrorMsg而不是字符串,请告诉我错误是什么。感谢您捕获缺少的分号。我得到的数据是:{COLUMNS:[PERSONID,FIRSTNAME,LASTNAME],数据:[[1001,Scott,Wimmer],[1002,Phillip,Senn],[1003,Paul,Nielsen]}另外,我不知道为什么,但是现在正在执行错误条件,而不是成功条件。@cf_Phillipsen尝试我的编辑。如果它仍在执行错误条件console.logErrorMsg而不是字符串,请告诉我错误是什么。感谢您帮助我意识到数据是大写的,我错过了。你的答案也有同样的问题。var数据=响应数据;应为var data=response.data;此外,您的for循环也被弄乱了。第一列应该是response.COLUMNS.length和response.COLUMNS[i]以及第二列和第三列应该分别是data.length和data[i].length和data[i][j]。我以为参数是数据,忘记了重新分配。所以,我只是将数据更改为response,并删除了data=response.data。感谢您帮助我意识到数据是大写的,但我忽略了这一点。你的答案也有同样的问题。var数据=响应数据;应为var data=response.data;此外,您的for循环也被弄乱了。第一列应该是response.COLUMNS.length和response.COLUMNS[i]以及第二列和第三列应该分别是data.length和data[i].length和data[i][j]。我以为参数是数据,忘记了重新分配。所以,我只是将数据更改为response,并删除了data=response.data。