转换但行为不正确的代码

时间:2014-10-10 05:28:08

标签: php coldfusion

我有以下哪些我成功转换为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>

3 个答案:

答案 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; - 你必须弄明白这一部分。除此之外,这非常接近你所寻找的。

     <cfloop array="#thisArray#" index="x">
     <cfoutput>
     Popup(#thisArray[x].['partner_id']#,"#thisArray[x].['partner_username']#",#thisArray[x]['box_status']#);
     </cfoutput>
     </cfloop>

注意:此代码段将替换上面的cfsavecontent代码段。