Arrays Arraylen偶尔计算元素错误

Arrays Arraylen偶尔计算元素错误,arrays,coldfusion,coldfusion-9,Arrays,Coldfusion,Coldfusion 9,我遇到了一个奇怪的问题…我已经设置了一个用于创建datatables JSON对象的cfscript,偶尔我会收到一个未经处理的异常错误“无法找到位置X处的元素”。X通常比我的数组实际包含的元素多一个,因此在我的情况下,数组中有44个元素,表达式错误总是表示“找不到位置45” 这里有一些代码 /* 44 total items in this array*/ aColumns = ['nd_event_group_id','nd_event_id', 'pref_mail_name', 're

我遇到了一个奇怪的问题…我已经设置了一个用于创建datatables JSON对象的cfscript,偶尔我会收到一个未经处理的异常错误“无法找到位置X处的元素”。X通常比我的数组实际包含的元素多一个,因此在我的情况下,数组中有44个元素,表达式错误总是表示“找不到位置45”

这里有一些代码

/* 44 total items in this array*/
aColumns = ['nd_event_group_id','nd_event_id', 'pref_mail_name',  'request_status_code', "life_gift_pledge_ob_amt", 'activity', ... ];
/* this will return 44 */
iColumnsLen = ArrayLen(aColumns);

...

savecontent variable="rc.aaData" {
    for (i=1; i <= rc.qResult.RecordCount ; i++) {
      writeOutput('{');
      for (col=1; col <= iColumnsLen; col++) {
        // the next line is what is referenced by the expression error 
        // "The element at position 45 cannot be found"
        writeOutput('"#aColumns[col]#":#SerializeJSON(rc.qResult[aColumns[col]][i])#'); 

        writeOutput((col NEQ iColumnsLen) ? ',' : '');
      }
      writeOutput('}');
      writeOutput((i NEQ rc.qResult.RecordCount ) ? ',' : '');
    }
  };
/*44此数组中的项目总数*/
aColumns=['nd_event_group_id'、'nd_event_id'、'pref_mail_name'、'request_status_code'、'life_gift_response_ob ament'、'activity'、…];
/*这将返回44*/
iColumnsLen=ArrayLen(aColumns);
...
savecontent变量=“rc.aaData”{

对于(i=1;i从发布的评论中得出的结果,听起来您的变量是未分配的。所有函数局部变量都需要这样声明,可以使用
VAR
关键字,也可以在
local
范围内对其进行专门限定

如果不这样做,变量对于CFC实例是全局的,因此在函数之间是共享的。这听起来像是你的问题


这些都在文档中:“。

从发布的评论中得出,听起来您的变量是未分配的。所有函数局部变量都需要这样声明,要么使用
VAR
关键字,要么在
local
范围内明确定义它们

如果不这样做,变量对于CFC实例是全局的,因此在函数之间是共享的。这听起来像是你的问题


这些都在文档中:“.”

这段代码是否在共享作用域宿主的CFC方法中,您是否会遇到非共享变量的问题?为什么要手动创建JSON?您是否尝试过
serializeJSON()
在整个查询中?基于Adam的注释,您可以使用它来检查变量。解压缩并运行。这非常简单。@JayRizzi,不使用变量会使其成为CFC的全局变量(由所有函数共享)。若要确保
aColumns
的每个实例都是线程安全的,请在函数块中定义它并对其进行var作用域。
function doSomething(){var aColumns=['…'];}
@JayRizzi,连接JSON字符串也容易出错。相反,请将查询转换为结构数组,然后使用
serializedJSON()
转换为JSON字符串。此代码是否在共享作用域宿主的CFC方法中,并且可能存在非共享变量?为什么手动创建JSON?是否尝试过
序列化JSON()
在整个查询中?基于Adam的注释,您可以使用它来检查变量。解压缩并运行。这非常简单。@JayRizzi,不使用变量会使其成为CFC的全局变量(由所有函数共享)。若要确保
aColumns
的每个实例都是线程安全的,请在函数块中定义它并对其进行var作用域。
function doSomething(){var aColumns=['…'];}
@JayRizzi,连接JSON字符串也容易出错。相反,请将查询转换为结构数组,然后使用
serializedJSON()
转换为JSON字符串。事实上,我有多个循环,它们不是线程安全的,请参阅了解更多信息事实上,我有多个循环,它们不是线程安全的,请参阅了解更多信息