我有以下哪些我成功转换为coldfusion,据我所知,我的谈话是正确的,但行为很烦人,不确定
这是php变体
<?php if (isset($_SESSION['box_status'])) {
print '<script type="text/javascript">';
print '$(function() {';
foreach ($_SESSION['box_status'] as $openedbox) {
print 'Popup('.$openedbox['partner_id'].',"'.$openedbox['partner_username'].'",'.$openedbox['box_status'].');';
}
print "});";
print '</script>';
}
?>
cfm variant
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<script type="text/javascript">
$(function() {
for (<cfoutput>#session.box_status#</cfoutput> in openedbox) {
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
}
});
</script>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
</cfif>
代码在php中正常工作,但是如果我刷新一个页面,我就永远不会在coldfusion中保持会话活动,而php正在这样做“
这是生成的带有转储的PHP代码
DUMP
array(2) {
[0]=>
array(3) {
["partner_id"]=>
string(1) "2"
["partner_username"]=>
string(9) "Elizabeth"
["box_status"]=>
string(1) "1"
}
[1]=>
array(3) {
["partner_id"]=>
string(1) "3"
["partner_username"]=>
string(6) "Joseph"
["box_status"]=>
string(1) "1"
}
}
php代码生成的代码
<script type="text/javascript">$(function() {Popup(2,"Elizabeth",1);Popup(3,"Joseph",1);});</script>
答案 0 :(得分:0)
查看生成的HTML代码的最佳方法,您将了解它为什么表现奇怪。 &#39;的foreach&#39;在PHP版本中使用PHP代码,但在CFML版本中它将以JavaScript格式打印,因此很明显它无法获得openbox变量而且您可能会收到错误。
还要放入cfsavecontent标记的全文以避免多个cfoutput。
编辑:
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a"><cfoutput>
<script type="text/javascript">
$(function() {
<cfloop array="#session.box_status#" index="openedbox">
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
</cfloop>
});
</script></cfoutput>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
</cfif>
答案 1 :(得分:0)
如果数组中的session.box_status,则可以将所有内容保存为标记。你确实混合了CF和javascript,你会在javascript中看到你的for循环输出你是否要查看html。
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<script type="text/javascript">
$(function() {
<cfoutput>
<cfloop array="#session.box_status# index=openedbox>
Popup(#openedbox['partner_id']#,"#openedbox['partner_username']#",#openedbox['box_status']#);
</cfloop>
</cfoutput>
});
</script>
</cfsavecontent>
<cfoutput>#a#</cfoutput>
答案 2 :(得分:0)
这不是完美的,但它更贴近您的目标:
<cfif isDefined('session.box_status')>
<cfsavecontent variable="a">
<cfloop collection="#session.box_status#" item="x">
<cfoutput>
Popup(#x['partner_id']#,"#x['partner_username']#",#x['box_status']#);
</cfoutput>
</cfloop>
</cfsavecontent>
<script type="text/javascript">
$(function() {
<Cfoutput>#a#</CFOUTPUT>
};
</script>
</cfif>
请注意,此代码假定session.box_status是一个包含三个成员的结构,partner_id,partner_username和box_status。如果情况并非如此,那么您的第一笔业务就是弄清楚session.box_status 是什么,因为那是您正在循环的事情。做一个转储该项目给自己一些线索。
这里的想法是你保存到你的变量&#34; a&#34;只是单独的&#34; popup()&#34;调用,然后将它们放入你的JS中。还有其他方法可以做到这一点,但这种代码很难做到。祝你好运:)
编辑: 注意 - 你说它是&#34;简单的字符串&#34;你想要循环,但PHP代码似乎表明某种对象。这就是我们感到困惑的地方。如果是字符串,您可能需要更改我的代码以循环LIST并提取特定位置的项目。但是你真的需要转出#session.box_status#以了解你在这里面对的是什么。
编辑2: 好的,在这种情况下你需要循环一个数组。但它不会是&#34;会话&#34; - 因为session是一个结构而不是一个数组。所以我不确定你的起点是什么对象名称。倾销会议可能会给你一个线索。在下面的示例中,我只是将其称为&#34; thisArray&#34; - 你必须弄明白这一部分。除此之外,这非常接近你所寻找的。 p>
<cfloop array="#thisArray#" index="x">
<cfoutput>
Popup(#thisArray[x].['partner_id']#,"#thisArray[x].['partner_username']#",#thisArray[x]['box_status']#);
</cfoutput>
</cfloop>
注意:此代码段将替换上面的cfsavecontent代码段。