【问题标题】:Code which is converted but behaving not properly已转换但行为不正确的代码
【发布时间】:2014-10-10 05:28:07
【问题描述】:

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

<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 中运行良好,但如果我刷新页面,我永远不会在冷融合中保持会话处于活动状态,而 php 正在这样做''

这是生成的带有转储的PHP代码

转储

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>

【问题讨论】:

  • 您是否开启了会话管理并检查了超时。还有一件事我在 php cod 中看不到 javascripts for loop,但它在 CF 中。
  • 是的,会话管理已启用,并且有 40 分钟的超时时间
  • 所以如果php中没有javascript的for循环,其实是在使用foreach循环,在cfscript中我们有for循环就对了
  • 但是你的代码没有被包裹在 如果你想循环结构然后用户收集循环
  • 好奇,你说it never keeps the session alive。那么页面第一次可以工作,刷新后就不能工作了?

标签: php coldfusion


【解决方案1】:

如果 session.box_status 在数组中,那么您可以这样做只是为了将所有内容都保留为标签。您确实在混合 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>

【讨论】:

  • 它不是一个数组,只是我们在coldfusion中使用的简单纯字符串
  • 当你有一个 for 循环时,你正在循环一个集合、列表或数组。 session.box_status 是什么?
【解决方案2】:

这并不完美,但它更接近您正在寻找的内容:

<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 是什么,因为那是您正在循环的事情。转储该项目给自己一些线索。

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

编辑: 注意 - 你说它是你想要循环的“简单字符串”,但 PHP 代码似乎表示某种对象。这就是我们感到困惑的地方。如果是字符串,您可能需要更改我的代码以遍历 LIST 并在特定位置提取项目。但是你真的需要转储#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>

注意:这个 sn-p 将替换上面的 cfsavecontent sn-p。

【讨论】:

  • 好的,我转储了 php 代码,这就是我得到的;数组(1){[0]=>数组(3){[“partner_id”]=>字符串(1)“2”[“partner_username”]=>字符串(9)“伊丽莎白”[“box_status”]=>字符串(1) "1" } }
  • 这似乎没有完成任务,我认为 php 将会话存储为关联数组,所以在冷融合中,我们可以使用结构,但这也对代码没有帮助
  • @ACF_JJJQ 不确定我可以在这里提供帮助。你正在传递一些东西,但似乎不知道它是什么或它来自哪里。是表单域吗?实际会话的一部分?如果它是会话的一部分,那么您已将 PHP 会话处理重写为 CF 会话处理,对吗?你似乎不知道确切地这是什么。
  • @Hi Mark:这是 php 代码上实际发生的 Pastebin:,我正在尝试使用coldfusion 的相同代码:这是 PHP 代码的 Pastebin:pastebin.com/JHJKsQKr
  • 这里是 Coldfusion 特定代码的 pastebin:pastebin.com/5FYXPucn
【解决方案3】:

检查您生成的 html 代码的最佳方法,您将了解它为何表现异常。 PHP 版本中的 'foreach' 使用 php 代码,但在 CFML 版本中它将在 JavaScript 中打印,因此显然它无法获取 opensbox 变量并且您可能会出错。

还要把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>

【讨论】:

  • 那么重写它的潜在方法是什么,我正在混合 jquery 和 Coldfusion 代码,就像它在 php 代码中发生的一样
  • 我已经添加了代码。您在 cfsavecontent 中所做的方式将考虑在 html 中打印并在 HTML 页面上呈现。您可能需要使用 CFLOOP 来告诉它的 CFML 循环。
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 2019-04-30
  • 2022-06-12
  • 2019-10-10
相关资源
最近更新 更多