我有一个页面,它从会话变量(session.stufailedarray)向屏幕打印一些包含一些信息的数组。在页面顶部,有一个链接将信息导出到excel。当我尝试这个(在Firefox,IE和Chrome中)它工作正常。但是用户一直告诉我他们收到了一条错误消息:“元素stufailarray是未定义的会话”。我知道变量就在那里,因为它只是将它打印到屏幕上,我可以在调试中看到它。为什么会发生这种情况,有时只会发生?
生成错误的代码:
<cfset ind=0>
<cfset anArray=arrayNew(2)>
<cfloop array="#session.stufailarray#" index="k">
<cfset ind+=1>
<cfset session.failed=find("UPDATE FAILED: ", "#k#")>
<cfset session.rrr=REFind("\d{9,9}", "#k#")>
<cfset idno=mid("#k#", REFind("\d{9,9}", "#k#"), 9)>
<cfset failed=mid("#k#", Refind("UPDATE FAILED: ", "#k#"), Len(#k#)-(Refind("UPDATE FAILED: ", "#k#")))>
<cfset anArray[ind][1]=#idno#>
<cfset anArray[ind][2]=#failed#>
</cfloop>
<!--- Set content type. --->
<cfcontent type="Application/vnd.ms-excel">
<cfheader name="Content-Disposition" value="filename=load_status.xls">
<cfoutput>
<table cols=2 border=1>
<cfloop from="1" to ="#ArrayLen(anArray)#" index="row">
<tr>
<td>#anArray[row][1]#</td>
<td>#anArray[row][2]#</td>
</tr>
</cfloop>
</table>
</cfoutput>
答案 0 :(得分:1)
请改为尝试:
<!--- Set content type. --->
<cfset anArray=[]/>
<cfif isDefined(session.stufailedarray)>
<cfset anArray=session.stufailedarray/>
</cfif>
<cfcontent type="Application/vnd.ms-excel">
<cfheader name="Content-Disposition" value="filename=load_status.xls">
<cfoutput>
<table cols=2 border=1>
<cfloop from="1" to ="#ArrayLen(anArray)#" index="row">
<tr>
<td>#anArray[row][1]#</td>
<td>#anArray[row][2]#</td>
</tr>
</cfloop>
</table>
</cfoutput>
确保您正确配置并启用了应用程序会话。 要使用会话变量,请在两个位置启用它们:
ColdFusion Administrator Application.cfc初始化代码 This.sessionManagement变量或活动的cfapplication标记。 ColdFusion Administrator,Application.cfc和cfapplication标记 还提供配置会话变量行为的工具, 包括变量超时。
答案 1 :(得分:1)
根据您的问题,您有一个名为session.stufailedarray
的变量。但是,在您发布的代码(生成错误)中,您有session.stufailarray
。这也是您收到的错误消息。
"Element stufailarray is undefined is session"
注意set(available)变量,失败是传递时,错误变量是现在时。