【问题标题】:How to define a variable in JavaScript with PHP echo function?如何使用 PHP echo 函数在 JavaScript 中定义变量?
【发布时间】:2012-12-05 23:21:10
【问题描述】:

如何从外部 php 文件中使用 echo 函数在 javascript 中定义变量?

我们有 theconfigfile.phpthejsfile.jsthephpfile.php

theconfigfile.php 我们有:

<?php
$path = 'http://example.com/home.php'; // Set your path
?>

thejsfile.js 我们有:

... 
if (confirm("Are you sure you want to delete")) {
        $.ajax({
            type: "POST",
            url: "http://example.com/home.php",
            data: dataString,
            cache: false
        });
...

thephpfile.php 我们有:

    <php 
    include "theconfigfile.php";
    ?>

    <html>
    <head>
    <script type="text/javascript" src="thejsfile.js"></script>
    </head>

<body>
...here is the code that uses file thejsfile.js...
</body>
</html>

我用了这个方法:

... 
if (confirm("Are you sure you want to delete")) {
        $.ajax({
            type: "POST",
            url: "<?php echo $path; ?>",
            data: dataString,
            cache: false
        });
...

仅当 javascript 是代码的一部分时才有效。如果我在外部使用它,就像这样......

<script type="text/javascript" src="thejsfile.js"></script>

...不起作用!解决方案?

【问题讨论】:

  • 为什么要通过 php 回显路径?为什么不直接在 javascript 中通过硬编码 url 或将路径分配到变量中以供以后使用?
  • 使用 ajax 和内联 php 似乎是矛盾的,不是 IMO 最好的主意。
  • 因为我有很多文件,我想从一个文件修改。

标签: php javascript html


【解决方案1】:

有几种方法可以做到这一点。

您可以将您的网络服务器配置为使用 PHP 处理扩展名为 .js 的文件,然后将您的 PHP 注入那里。当然,这意味着您需要一种方法来实际计算您的变量,这会减慢您提供常规 javascript 内容的速度。

您可以像这样简单地将 PHP 变量输出到 &lt;script&gt; 元素中的 Javascript 变量

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

然后在你的 AJAX 中访问这个 path 变量。大多数人可能会使用第二种方法。

【讨论】:

  • 最好的!作品!谢谢你的帮助。 :)
  • 请记住,如果任何其他脚本使用名为 path 的变量,这可能会破坏它们。
  • 是的,现在,我将使用新名称进行修改。谢了!
  • @DC_ 是的,这种方法确实会污染全局 javascript 范围,因此不建议经常这样做。如果您发现自己以这种方式输出了很多变量,最好输出一个带有配置变量的单个 js 对象,例如在范围内只占用一个基本变量名。
【解决方案2】:

你可以将你的thejsfile.js重命名为thejsfile.php,在它的最开始添加以下内容,它应该被解析为PHP:

<?php header("Content-type: text/javascript"); ?>

然后像这样引用它:

<head>
<script type="text/javascript" src="thejsfile.php"></script>
</head>

您的另一个选择是将您的服务器设置为为 PHP 解析 .js 文件。

【讨论】:

    【解决方案3】:

    在phpfile.php中,

    <html>
    <head>
    <script type="text/javascript">
        var config = { url: '<?= $path; ?>' };
    </script>
    <script type="text/javascript" src="thejsfile.js"></script>
    </head>
    

    然后你可以在你的 javascript 中使用 config.url 访问它。

    【讨论】:

    • 这是个好主意,我使用了这个方法:&lt;script type="text/javascript"&gt; var path = "&lt;?php echo $path; ?&gt;"; &lt;/script&gt; 但非常感谢!
    • 我会尝试将您的配置分开,仅分配变量路径可能会与其他脚本产生问题。如果您需要,这会为您提供一个很好的干净对象。
    【解决方案4】:

    您只能以这种方式将值放入由 PHP 处理的文件中。
    外部 JavaScript 文件不由 PHP 处理,因此它们按原样链接。

    【讨论】:

      【解决方案5】:

      除非您通过 JSONP 向另一台服务器发布帖子,否则您可能只考虑在 Javascript 中使用硬编码的相对路径,这样您就不需要将路径从服务器发送到客户端:

      ...
          $.ajax({
              type: "POST",
              url: "home.php",
              data: dataString,
              cache: false
          });
      ....
      

      但是,如果这是一个经常更改的 URL,并且它确实需要可配置,那么您可以将 PHP 变量作为类似这样的脚本回显”

      <html>
      ...
      <script src="thejsfile.js" type="text/javascript">
      <script type="text/javascript">
          // 'path' is a variable that is defined in thejsfile.js
          path = '<?php echo htmlentities($path)  ?>';
      </script>
      
      ...
      

      当您从服务器向客户端输出信息时(尤其是作为 Javascript),您必须非常小心,以免它被转义以防止脚本攻击(即允许人们将 javascript 注入您的代码)。在这种情况下,没有理由允许任何类型的 html 字符。

      【讨论】:

        【解决方案6】:

        使用外部 JS 文件时,您可以将值存储在隐藏字段中并使用 JavaScript 检索字段值。

        <input type="hidden" name="path" id="path" value="<?php echo $path; ?>" />
        

        在 javascript 中(我将使用 jquery)

        var path = $('#path').attr('value');
        

        显然您可以将变量写入页面上的脚本标签,但如果您使用任何高级类型的模式,则可能很难访问该变量。

        【讨论】:

          【解决方案7】:
          echo "<script type='text/javascript'>var AccomodationInfoForm4 =".$path."</script>";
          

          只需尝试回显上面显示的方式,您就可以在任何地方访问您的变量。因为这将对您页面上的所有 js 文件全局可用。

          【讨论】:

            猜你喜欢
            • 2019-08-19
            • 1970-01-01
            • 1970-01-01
            • 2015-05-02
            • 1970-01-01
            • 2015-10-21
            • 1970-01-01
            • 2020-03-24
            • 2023-03-24
            相关资源
            最近更新 更多