【问题标题】:php statements within jqueryjquery中的php语句
【发布时间】:2009-06-04 14:18:43
【问题描述】:

在 jquery 函数中使用诸如 'if' 之类的 php 语句是一种不好的做法吗?

我真的应该只编写加载更多函数而不是使用 php 限制一些函数吗?它似乎工作正常,但想知道这是否是主要的虚假?

示例:

这是一个代码 sn-p,基本上如果 php 变量 $url 等于 'projects' 那么代码将返回额外的行,否则这些将对其他页面隐藏。这有意义吗?

timer = setTimeout(function() {
                $('li#contact').removeClass('cur');
                $('li#$url').addClass('cur');
                "; if($url=='projects') { echo"
                $('ul.projects').fadeIn('slow');
                $('ul.image_display').css('display', 'block');"; }
                echo"
                    }, 8625);

【问题讨论】:

  • 你能举个例子吗?既然 PHP 运行在服务器上,而 jQuery 运行在浏览器中,那么“在 jquery 中使用 php”是什么意思?
  • 已经更新了上面的例子

标签: php jquery if-statement


【解决方案1】:

在我看来,就代码的可读性和可维护性而言,这是一种不好的做法。如果只是因为它是相互嵌入的两种语言,这意味着如果不解析两种语言就无法理解它,并且对于许多人来说,当他们在解析 JS 和解析 PHP 之间进行上下文切换时会导致心理“页面错误”。

根据存在的页面元素创建 javascript 分支很容易,我认为这是首选解决方案。它比有条件地提供某些 javascript 更好(尽管我认为当你有大量的 js 时提供不同的 javascript 可能开始有意义),它也比基于 URL 的分支更好......当你去重构它时会发生什么?

如果你真的必须基于 PHP 对你提供的 JS 进行分支,我希望至少在单独的行上看到它们......类似于:

<?php if($stmt): ?>
$(javascript).code.goes.here
<?php else: ?>
$(alernative.javascript).code.goes.here
<?php endif; ?>

因为这比必须在一行/语句中阅读和理解两种语言更好。

【讨论】:

    【解决方案2】:

    不错的做法,因为有时 PHP 变量的值会改变您希望代码执行的操作。

    但是,您必须使用 来打开和关闭您的 PHP 代码。

    【讨论】:

    • 所以基本上 php 可能会影响缓存,但不会影响代码性能,所以不是很糟糕的做法?意味着我至少不必全部重写!! :)
    • 基本上,您也不想缓存更改的内容。我想理论上你可以做一个 PHP if else 并将两个版本的 javascript 放在单独的 .js 文件中——但说实话对于一个可能不是那么大的网站和一个那么小的代码 sn-p我不会。
    【解决方案3】:

    这取决于。如果您只是写出一些供 javascript 使用的用户数据(例如用户 ID 或名称),那么没有。但是,如果您经常将 PHP 用于控制结构,那么可能有更好的方法来做到这一点。

    您的方法的一大缺点(除了代码有点难看)将阻止 js 被很好地缓存。通过动态创建 js 而不是在单独的压缩 js 文件中,您失去了缓存它的能力并损害了您的带宽。

    【讨论】:

      【解决方案4】:

      我尽量将所有代码分开(HTML/CSS/PHP/JS),因为我不喜欢我的 HTML 或 PHP 中的大块 JS 代码。我通常对变量所做的只是将它们放在 HTML 中的某个位置,例如&lt;div id="url"&gt;value&lt;/div&gt; 然后使用 jQuery 检索它。取决于没有变量,我有时会使用display:none 在页面上隐藏其中的一些 div。

      这样我仍然可以为多个应用程序使用相同的 JS 代码,具体取决于检索到的值。我必须说,我不知道这是否被认为是好的,或者这个设置/方法(也)没有完成。

      【讨论】:

        【解决方案5】:

        你不应该把你的php代码放在php标签之间吗?否则,它只会显示在源代码中,而不是在服务器上进行处理。

        timer = setTimeout(function() {
                            $('li#contact').removeClass('cur');
                            $('li#$url').addClass('cur');
                            "; <?php if($url=='projects') { echo"
                            $('ul.projects').fadeIn('slow');
                            $('ul.image_display').css('display', 'block');"; }
                            echo"
                                    } ?>, 8625);
        

        题外话:一些更好的格式也会很好:)

        【讨论】:

        • 这只是一个sn-p,标签在别处!
        【解决方案6】:

        我不认为这是不好的做法。我使用 ASP.NET 文字根据从数据库返回的数据写出动态 jQuery。我不经常这样做,但有时需要它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多