Javascript 如何从CFC结果填充Jquery数组和DOM对象
我有以下问题,希望这里有人能给我一个更合适的解决方案。首先,我尝试从ajax中CFC调用的结果填充12个表单对象。如果在返回集上使用if/else,并通过从CFC返回的描述填充每个DOM对象值,那么必须有一种更简单的方法来实现这一点。让我向您展示支持组件,然后是我认为可以做得更好的ajax调用 jQueryUtils.js中使用getValue()调用SessionMgr.cfc获取会话变量值Javascript 如何从CFC结果填充Jquery数组和DOM对象,javascript,jquery,ajax,coldfusion,cfc,Javascript,Jquery,Ajax,Coldfusion,Cfc,我有以下问题,希望这里有人能给我一个更合适的解决方案。首先,我尝试从ajax中CFC调用的结果填充12个表单对象。如果在返回集上使用if/else,并通过从CFC返回的描述填充每个DOM对象值,那么必须有一种更简单的方法来实现这一点。让我向您展示支持组件,然后是我认为可以做得更好的ajax调用 jQueryUtils.js中使用getValue()调用SessionMgr.cfc获取会话变量值 function getValue(a) { var result = undefined;
function getValue(a) {
var result = undefined;
$.ajax({
url: "cfc/SessionMgr.cfc",
async: false,
type: "get",
dataType: "text",
data: {
method: "getValue",
variablename: a
},
success: function(response) {
result = response;
//console.log('getValue: ', a , ' value: ' , response);
},
error: function(jqXHR, status, error) {
console.log('Error Occurred');
console.log(error);
}
});
return result;
}
它调用SessionMgr.cfc
<cffunction name="getValue" access="remote" returntype="string" returnformat="plain" output="yes" hint="I get the value of the given user-specific variable.">
<cfargument name="variablename" type="string" required="yes">
<cfreturn session[arguments.variableName] />
</cffunction>
返回此数据集;
由于我的DOM对象的命名约定,设置它们的唯一方法似乎是在$.each()事件期间通过if/else。如果有人有更好的直接访问阵列的方法,或者有任何改进,我们将不胜感激
因此,返回的JSON对象包含列和数据,如何计算if/else中的列,然后获得与数组引用对应的数据值
所以,我在成功的基础上增加了一点:回调
var i = 0;
var col = [];
var dat = [];
col = response.COLUMNS;
dat = response.DATA;
console.log('col ', col);
console.log('dat ',dat);
这是控制台结果,
我不明白的是,为什么数据嵌套在比列更深的层中,然后如何将列名与数据中的值配对,以便计算一个值并将DOM对象设置为另一个
我不明白的是,为什么数据嵌套的层比
列,然后如何将列名与中的值匹配
我可以对数据进行求值,并将DOM对象设置为
其他的
ColdFusion中的JSON序列化与附带的UI小部件相关联。大多数开发人员已经不再使用这些UI标记,但问题是将查询对象转换为更标准的JSON格式
将以以下格式返回:
{
"COLUMNS":["BOOKID","TITLE","GENRE"],
"DATA":[
[8,"Apparition Man","Fiction"],
[2,"Shopping Mart Mania","Non-fiction"]
]
}
此CFC将查询对象转换为数组数组或结构数组(JSON对象):
默认情况下,CFC小写所有列名。如果愿意,可以调整它以保持列名的当前大小写。然后可以使用jQuery根据表单ID选择表单中的所有字段,并将JSON键映射到字段ID。我相信还有其他方法可以完成这项任务,而无需手动将数据一次映射到一个字段
我不明白的是,为什么数据嵌套的层比
列,然后如何将列名与中的值匹配
我可以对数据进行求值,并将DOM对象设置为
其他的
ColdFusion中的JSON序列化与附带的UI小部件相关联。大多数开发人员已经不再使用这些UI标记,但问题是将查询对象转换为更标准的JSON格式
将以以下格式返回:
{
"COLUMNS":["BOOKID","TITLE","GENRE"],
"DATA":[
[8,"Apparition Man","Fiction"],
[2,"Shopping Mart Mania","Non-fiction"]
]
}
此CFC将查询对象转换为数组数组或结构数组(JSON对象):
默认情况下,CFC小写所有列名。如果愿意,可以调整它以保持列名的当前大小写。然后可以使用jQuery根据表单ID选择表单中的所有字段,并将JSON键映射到字段ID。我确信还有其他方法可以完成该任务,而无需手动将数据一次映射到一个字段。除此之外,还需要从AJAX请求中删除
async:false
。这是一个非常糟糕的做法,浏览器会在控制台中向您显示一个警告,而且无论如何也不需要。我这里的问题的所有答案都非常明确地说明了添加async:false,您能否详细说明为什么会出现这种不好的做法?主要原因是它在请求进行时挂起浏览器。如果您的服务器响应缓慢,则用户会觉得浏览器已崩溃,并且在某些情况下会导致操作系统终止浏览器进程。简而言之,在处理AJAX时始终使用异步模式,无论是通过回调还是承诺。更多IIRCasync:false
从1.8开始就不推荐使用Promissions,但仍然可以与回调一起使用。也就是说,您通常不希望使用同步调用,因为它们会阻塞。除此之外,您还需要从AJAX请求中删除async:false
。这是一个非常糟糕的做法,浏览器会在控制台中向您显示一个警告,而且无论如何也不需要。我这里的问题的所有答案都非常明确地说明了添加async:false,您能否详细说明为什么会出现这种不好的做法?主要原因是它在请求进行时挂起浏览器。如果您的服务器响应缓慢,则用户会觉得浏览器已崩溃,并且在某些情况下会导致操作系统终止浏览器进程。简而言之,在处理AJAX时始终使用异步模式,无论是通过回调还是承诺。更多IIRCasync:false
从1.8开始就不推荐使用Promissions,但仍然可以与回调一起使用。也就是说,您通常不希望使用同步调用,因为它们会阻塞。对于CF11+,您还可以使用更改查询的默认值。适用于Lucee,但也适用于CF。对于CF11+您还可以使用更改查询的默认值。适用于Lucee,但也适用于CF。
{
"COLUMNS":["BOOKID","TITLE","GENRE"],
"DATA":[
[8,"Apparition Man","Fiction"],
[2,"Shopping Mart Mania","Non-fiction"]
]
}
{
"data":[
{"bookid":8,"genre":"Fiction","title":"Apparition Man"},
{"bookid":2,"genre":"Non-fiction","title":"Shopping Mart Mania"}
]
}