php - 服务器端代码与客户端代码混合 - 最佳实践

标签 php javascript jquery

在给定的 php 脚本中,我有以下内容:

<script>

    function showMember() {

           return $.ajax({ //Perform an asynchronous HTTP (Ajax) request.

                type: 'get',

                //A string containing the URL to which the request is sent.
                url: '<?php echo $this->createUrl('member'); ?>',
    ...

如果我将它放在 php 文件中,这会起作用。

但这似乎不是组织事物的好方法,我希望将所有这些代码放在一个单独的 .js 文件中。

处理这些情况的正确方法是什么?

最佳答案

我们使用两种方法使在服务器端创建的数据可供客户端访问:

1) '数据传输'对象,由服务器端脚本填充。例如:

PHP:

<?php
  $data = [
    'urls' => [
      'createSomething' => $this->createUrl($from, $something),
      // ...
    ],
    'labels' => [
      'createSomething' => $this->cms($labelName),
      // ..
    ],
  ]
?>
<script>
  var dto = <?= json_encode($data) ?>;
</script>

JS:

$.ajax(dto.urls.createSomething, {}, function() { 
  alert(dto.labels.createSomethingSuccess);
}

2) 数据集属性,同样由服务器填充。例如:

PHP:

<button data-target-url="<?= $this->createUrl($from, $something) ?>"
     >Something</button>

JS:

$('button[data-target-url]').click(function() {
  var targetUrl = $(this).data('targetUrl');
  $.post(targetUrl...);
}

对我来说,第二种方法似乎最有用,因为某些与 UI 相关的属性集仍在服务器端计算 - 例如,插件设置。

关于php - 服务器端代码与客户端代码混合 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16263087/

相关文章:

php - 如何使用 jquery 或 php 解析 HTML

https 和 http 之间的 PHP SESSION 变量

javascript - 调用第 43 行未定义的方法 mysqli_stmt::get_result()

javascript - vis.js - 手动放置节点

javascript - 如何使用JQuery显示带有加载符号的数据表

Jquery MultiSelect - 更改字体大小和宽度

jquery、XML 到 HTML

jquery - 如何摆脱 emberjs 中的 SourceMapConcat 构建错误?

php - 如何在浏览器中存储缓存?

javascript - knockout 数据绑定(bind)点击