3

在给定的 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 文件中。

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

4

3 回答 3

4

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

1) 'data transfer' 对象,由服务器端脚本填充。例如:

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 相关的属性集时 - 例如,插件设置。

于 2013-04-28T13:08:37.967 回答
1

最好将您的 php 和 javascript 代码分开。您可以生成的是一个基本 url,因此 javascript 可以生成它自己的 url。在您的 html 中使用 php 生成这些变量。

您的 html 和 php 中的示例

<html>
<head>
  <script>
  var BASE_URL = <?=$baseUrl?>;
  </script>
  <script src="external.js"></script>
</head>
<body>
</body>
</html>

然后您可以在 external.js 中使用变量 BASE_URL

function showMember() {

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

            type: 'get',

            //A string containing the URL to which the request is sent.
            url: BASE_URL + "member",

这是许多网站使用的简单场景。在包含外部脚本之前,在正文中生成全局脚本变量。

于 2013-04-28T13:08:28.747 回答
0

您可以调用 javascript 函数并将 url 作为函数参数发送。

showMember(<?php echo $this->createUrl('member'); ?>);

在 js 中捕获并使用它。

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

                type: 'get',

                //A string containing the URL to which the request is sent.
                url: posturl,
于 2013-04-28T13:12:32.690 回答