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

标签 javascript jquery ajax coldfusion cfc

我遇到以下问题,希望有人能启发我更合适的解决方案。首先,我尝试从 Ajax 中 CFC 调用的结果中填充 12 个表单对象。我对返回的集合进行 if/else 操作,并通过从 CFC 返回的描述填充每个 DOM 对象值,必须有一种更简单的方法来执行此操作。让我向您展示支持组件,然后是我认为可以做得更好的 ajax 调用;

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

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>

然后调用以下函数;

function getAllNodeValues() {

    var lID =        getValue('lID');
    var nID =        getValue('nID');
    var rLocation =  getValue('rLocation');
    var rMonth =     getValue('rMonth');
    var rYear =      getValue('rYear');
    var rStartDate = getValue('rStartDate');
    var rEndDate =   getValue('rEndDate');

        $.ajax({
            url: "cfc/Nodes.cfc",
            type: "get",
            async: false,
            dataType: "json",
            data: {
                Method: "GetAllNodeValues",
                LineID: lID,
                LineNodeID: nID,
                DCID: rLocation,
                Month: rMonth,
                Year: rYear,
                StartDate: rStartDate,
                EndDate: rEndDate
            },
          success: function(response) {
              $.each(response.DATA, function(i, row) {
                  // get value of first row as descriptions;
                  var val = row[0];
                  var descr = row[1];
                  // append new options
                  if(descr == 'IsActive') {
                      $('#cboNodeIsActive').val(val);
                  } else if(descr == 'OpCode') {
                      $('#cboNodeOpCode').val(val);
                  } else if(descr == 'IsUnits') {
                      $('#txtNodeIsUnits').val(val);
                  } else if(descr == 'Fractal') {
                      $('#cboNodeFractal').val(val);
                  } else if(descr == 'Ordinal') {
                      $('#txtNodeOrdinal').val(val);
                  } else if(descr == 'ParentID') {
                      $('#cboNodeParentID').val(val);
                  } else if(descr == 'Constant') {
                      $('#cboNodeConstant').val(val);
                  } else if(descr == 'ConstantValue') {
                      $('#txtNodeConstantValue').val(val);
                  } else if(descr == 'CurrentBalance') {
                      $('#txtNodeCurrentBalance').val(val);
                  } else if(descr == 'EndingBalance'){
                      $('#xtxNodeEndingBalance').val(val);
                  } else if(descr == 'CurrentUnits'){
                      $('#txtNodeCurrentUnits').val(val)
                  } else if(descr == 'EndingUnits'){
                      $('#txtNodeEndingUnits').val(val);
                  }
              });
          },
          error: function(msg) {
              console.log(msg);
          }
      });   
    }

返回此数据集; ReturnedDataset 由于我的 DOM 对象的命名约定,设置它们的唯一方法似乎是在 $.each() 事件期间通过 if/else 结束。如果有人有更好的直接访问数组的方法,或者对这里的操作方式有任何改进,我们将不胜感激。

所以返回的 JSON 对象有 COLUMNS 和 DATA,如何在 if/else 中计算 COLUMNS,然后获取与数组引用对应的 DATA 值?

所以,我将其添加到我的成功中:回调;

 var i = 0;
              var col = [];
              var dat = [];
              col = response.COLUMNS;
              dat = response.DATA;
              console.log('col ', col);
              console.log('dat ',dat);

这是控制台结果, consoleDump

我不明白的是为什么 DATA 嵌套的层比 COLUMNS 更深,然后如何将列名与数据中的值匹配成对,我可以评估一个并将我的 DOM 对象设置为另一个?

最佳答案

what I dont understand is why is DATA nested a layer deeper than COLUMNS, and then how do I match-up the column name to the value in data into pairs that I can evaluate one and set my DOM object to the other?

ColdFusion 中的 JSON 序列化与其附带的 UI 小部件相关联。大多数开发人员已经放弃了这些 UI 标签,但问题是将查询对象转换为更标准的 JSON 格式。 I created a CFC to handle that

serializeJSON( someQuery )

将以这种格式返回:

{
  "COLUMNS":["BOOKID","TITLE","GENRE"],
  "DATA":[
    [8,"Apparition Man","Fiction"],
    [2,"Shopping Mart Mania","Non-fiction"]
  ]
}

此 CFC 会将查询对象转换为数组数组或结构数组(JSON 对象):

{
  "data":[
    {"bookid":8,"genre":"Fiction","title":"Apparition Man"},
    {"bookid":2,"genre":"Non-fiction","title":"Shopping Mart Mania"}
  ]
}

默认情况下,CFC 将所有列名称小写。如果您愿意,您可以对其进行调整以将列名称保留为当前大小写。然后,您可以使用 jQuery 通过表单 ID 选择表单中的所有字段,并将 JSON 键映射到字段 ID。我确信还有其他方法可以完成该任务,而无需一次手动将数据映射到一个字段。

关于javascript - 如何从 CFC 结果填充 Jquery 数组和 DOM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60758134/

相关文章:

javascript - 在页面中多次使用时,JQuery 插件不起作用

多行 jQuery 正则表达式

ajax - jQuery AJAX 请求错误状态 0

javascript - 如何在数据添加到数据库后立即将数据发送到网页

javascript - 无法让 WordPress AJAX 工作

javascript - 在 Wordpress 页面中切换 DIV

javascript - nodejs - 仅当来自服务器 ip 时才允许请求

javascript - 在JavaScript中创建服务库,如何将一个文件中的函数导出到另一个文件中?

php - 如何使用 Ajax 将页面内容添加到 div 中?

javascript - 使用 php 将值从 DB 传递到 jquery