它是不好的做法呼应与PHP的JavaScript(Is it bad practice to ech

2019-09-17 23:09发布

我有一个PHP应用程序,使得使用一个监听器类,它基本上只是设置与jquery(下面的例子)的AJAX请求的。 但由于某些原因,呼应的JavaScript似乎只是不雅。 它是更好的做法是建立一个单身类的JavaScript被传递到(这可能会引入耦合)或只是呼应像我现在做的脚本?

下面是我在做什么的代码片段。

<?php

        $script = "
                    <script>
                    $(document).ready(function(){
                        $('".$trigger."').".$action."(function() {
                        ".$js_variables."
                            var ajax_load = '';
                            var loadUrl = '".$this->controller_path."';
                            var action = $(this).attr('id');

                            $('".$this->parent."')
                            .hide(2)
                            .html(ajax_load)  
                            .load(loadUrl, {action: action, ".$post_mapper."})
                            .fadeIn(800);
                        });
                    });
                </script>
        ";

      echo $script;

?>

编辑:使用一个单独的类也将允许我使用$(document).ready()或快捷键版本$(function(){})而不是只有一次的每一次我添加了一个侦听器。 但我不知道这是值得额外的时间和精力...任何想法?

Answer 1:

毫米它的所有偏好......我一般会做这样的,所以我的文本编辑器将能够确定什么的JavaScript,什么是PHP所以它不会让我的眼睛流血想看看非代码彩色文本。

<script>
    $(document).ready(function(){
        $('<?php echo $trigger ?>').<? echo $action ?>(function() {
            <?php echo $js_variables ?>
            var ajax_load = '';
            var loadUrl = '<?php echo $this->controller_path ?>';
            var action = $(this).attr('id');

            $('<?php echo $this->parent ?>')
                .hide(2)
                .html(ajax_load)  
                .load(loadUrl, {action: action, <?php echo $post_mapper ?>})
                .fadeIn(800);
            });
    });
</script>


Answer 2:

它是不好的做法用PHP呼应的JavaScript?

一般:是

这是一个常见的做法是从PHP呼应的JavaScript,但我极力劝阻

在大多数情况下,你能避免受以下前端MVC结构混合的语言:

HTML所属.html *文件。 这是模型。
CSS所属.css文件。 这是视图。
JS所属.js文件。 它的控制器。

我觉得非常难得,我确实需要产生从服务器端语言的JavaScript。 大部分我所实际需要的时间是传递信息的JavaScript可以使用。

而不是试图输出:

<a href="#" id="foo">bar</a>
<script>
    $('#foo').click(function () {
        $.ajax('http://example.com')...
        return false;
    });
</script>

对于每一个环节,尽量使用本地HTML属性做最繁重的工作:

<a href="http://example.com/" class="ajax-link">bar</a>

在你的脚本,你可以有:

$(document).on('click', '.ajax-link', function () {
    $.ajax($(this).attr('href'))...
    return false;
});

委托函数只需要进行一次绑定,并可以从一个静态的JS文件来完成,而不需要去尝试,并注入到JS PHP代码。

如果您需要通过传递更多信息,使用data-*属性结合.data(...)

*或.php或用于模板任何其他服务器端语言。


有利基的原因从服务器回应客户端代码。 一个例子是产生JSON的JSONP API,你需要动态生成回调。

如果你没有一个很好的理由与服务器端语言生成JS,不要。



Answer 3:

由于它总是依赖。 如果你正在写一个小的应用程序这种混合物不会伤害你的。 当应用程序增长到一定规模时,我个人觉得它更容易维护,当我没有在一个文件中混合语言。

历史告诉我们在前端不能在一个文件中混合使用HTML,JavaScript和CSS。 这是更好的,让他们分开,否则就很难找到合适的位置来看待,当您试图跟踪的错误。 混合JavaScript和服务器端的语言也好不了多少。 还有一些事情,来我的心,我觉得OK。 如配置或本地化文件,这需要有动态值。

在你的例子,我宁愿保持它分开。 所有你做的可以用(数据)来做到完美属性的HTML元素和一些DOM查找。 看来还需要收集您的观点,即是更好地保存在HTML的一些信息。 例如: $action这可能是源自一种形式非常简单:

HTML

<from method="POST" action="/you-name-it">
  ...
</form>

JS

$(function(){
    var form = $('form');
    $.ajax( {
      type: "POST",
      url: form.attr( 'action' ),
      data: form.serialize(),
      success: function( response ) {
        console.log( response );
      }
    } );
});

为什么这种具体形式提交的逻辑,可以在JavaScript和/或PHP。 这不要紧,他们如何沟通。



Answer 4:

这是完全可以接受的,但很危险的-你正在生成的JS的部分上即时,这意味着你必须生成有效的JS代码,否则整个代码块将由一个语法错误被杀死。

例如,如果你使用PHP中插入JS代码块中的PHP变量的值,是这样的:

<script type="text/javascript">
var last_name = '<?php echo $last_name ?>';
</script>

和$姓氏恰好是O'Brien ,你现在又推出了一个语法错误,因为生成的代码将是:

var last_name = 'O'Brien';
                ^^^--- string with contents O
                   ^^^^^--- unknown/undefined variable Brien
                  ^^--string followed by variable, but no operator present.
                        ^--- start of a new unterminated string containing a ;

任何时候你要插入原始的基于PHP的数据转换成一个Javascript变量,你基本上必须使用json_encode() ,这保证了生成的JS数据在语法上是有效的JS代码:

var last_name = <?php echo $last_name ?>;

请注意,我没有把任何'到这个版本- json_encode需要照顾的是你。



文章来源: Is it bad practice to echo javascript with php