Php 已转换但行为不正常的代码

Php 已转换但行为不正常的代码,php,coldfusion,Php,Coldfusion,我已经成功地将以下内容转换为coldfusion,据我所知,我在它的对话中是正确的,但其行为令人讨厌,不确定 这是php的变体 <?php if (isset($_SESSION['box_status'])) { print '<script type="text/javascript">'; print '$(function() {'; foreach ($_SESSION['box_status'] as $openedbox) {

我已经成功地将以下内容转换为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>';
    }
?>
由php代码生成的代码

$(函数(){Popup(2,“Elizabeth”,1);Popup(3,“Joseph”,1);});

检查生成的html代码的最佳方法,您将了解其行为异常的原因。 PHP版本中的“foreach”使用PHP代码,但在CFML版本中,它将以JavaScript打印,因此显然它将无法获取openedbox变量,并且您可能会得到错误

还可以将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>

$(函数(){
弹出窗口(#openedbox['partner_id']#、“#openedbox['partner_username']#、#openedbox['box_status']#);
});
#a#

如果session.box\u状态在一个数组中,那么您可以这样做只是为了将所有内容都保留为一个标记。您确实混合了CF和javascript,如果要查看html,您将在javascript中看到for循环输出

<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>

$(函数(){

这可能并不完美,但它更接近您想要的:

<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>

弹出窗口(#x['partner_id']#、“#x['partner_username']#、#x['box_status']#);
$(函数(){
#a#
};
注意:此代码假定session.box\u状态是一个包含三个成员的结构,即partner\u id、partner\u username和box\u status。如果不是这样,那么您的首要任务是准确地确定session.box\u状态,因为这是您正在循环的内容。转储该项目以给自己一些线索

这里的想法是,将单独的“popup()”调用保存到变量“a”中,然后将它们输入到JS中。还有其他方法可以做到这一点,但这种代码很难变得漂亮。祝你好运:)

编辑: 注意-你说它是“简单字符串”你想循环,但PHP代码似乎表示某种对象。这就是我们感到困惑的地方。如果是字符串,你可能需要修改我的代码以循环列表并提取特定位置的项。但是你确实需要转储#session.box#status#来了解你在这里遇到的问题

编辑2: 好的,在这种情况下,您需要循环一个数组。但它不是“会话”-因为会话是一个结构而不是数组。所以我不确定您的起始点是什么对象名称。转储会话可能会给您一个线索。在下面的示例中,我只是将其称为“thisArray”-你必须弄清楚那部分。除此之外,这与你想要的非常接近

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


弹出窗口(#thisArray[x].[partner\u id'].#,“#thisArray[x].[partner\u username'].#,#thisArray[x].[box\u status']#);


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

是否打开会话管理并检查超时。还有一件事我在php cod中看不到javascripts for loop,但它在CF中。是的,会话管理已启用,并且有一个很好的超时,比如说40分钟。如果php中没有javascript for loop,那么它就是actually使用foreach循环,在cfscript中,我们有for循环,但您的代码没有包装在其中如果您想在结构上循环,那么用户集合循环好奇地说,
它永远不会使会话保持活动状态
。所以页面第一次工作,刷新后就不工作了?那么,重写它的潜在方式是什么呢?我混合了jqueryY和CaldFieldCube,就像在PHP代码中所发生的一样,添加了代码。你在CFaveCaveCube里面做的方法将考虑在HTML中打印并在HTML页面上进行渲染。你可能需要使用cFLUP来告诉它的CFML循环。它不是一个数组,只是简单的普通字符串,因为在for循环中,你是循环的。什么是session.box\u status?好的,我转储了php代码,下面是我得到的结果;array(1){[0]=>array(3){[“partner\u id”]=>string(1)“2”[“partner\u username”]=>string(9)“Elizabeth”[“box\u status”]=>string(1)“1”}这似乎没有完成任务,我认为php将会话存储为关联数组,因此在coldfusion中,我们可以使用这些结构,但这也无助于code@ACF_JJJQ我不确定我能帮上什么忙。你正在传递一些东西,但似乎不知道它是什么或来自哪里。它是表单字段吗?是实际sess的一部分ion?如果它是会话的一部分,那么您已经将PHP会话处理重写为CF会话处理,对吗?您似乎不知道这到底是什么。@Hi Mark:这是PHP代码上实际发生的Pastebin:,与我正在使用coldfusion尝试的代码相同:这是PHP代码的Pastebin:这是用于coldfusion特定代码:
<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>
<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>
     <cfloop array="#thisArray#" index="x">
     <cfoutput>
     Popup(#thisArray[x].['partner_id']#,"#thisArray[x].['partner_username']#",#thisArray[x]['box_status']#);
     </cfoutput>
     </cfloop>