Javascript 如何从CFC结果填充Jquery数组和DOM对象

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;

我有以下问题,希望这里有人能给我一个更合适的解决方案。首先,我尝试从ajax中CFC调用的结果填充12个表单对象。如果在返回集上使用if/else,并通过从CFC返回的描述填充每个DOM对象值,那么必须有一种更简单的方法来实现这一点。让我向您展示支持组件,然后是我认为可以做得更好的ajax调用

jQueryUtils.js中使用getValue()调用SessionMgr.cfc获取会话变量值

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时始终使用异步模式,无论是通过回调还是承诺。更多IIRC
async:false
从1.8开始就不推荐使用Promissions,但仍然可以与回调一起使用。也就是说,您通常不希望使用同步调用,因为它们会阻塞。除此之外,您还需要从AJAX请求中删除
async:false
。这是一个非常糟糕的做法,浏览器会在控制台中向您显示一个警告,而且无论如何也不需要。我这里的问题的所有答案都非常明确地说明了添加async:false,您能否详细说明为什么会出现这种不好的做法?主要原因是它在请求进行时挂起浏览器。如果您的服务器响应缓慢,则用户会觉得浏览器已崩溃,并且在某些情况下会导致操作系统终止浏览器进程。简而言之,在处理AJAX时始终使用异步模式,无论是通过回调还是承诺。更多IIRC
async: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"}
  ]
}