【问题标题】:How to embed php script in javascript?如何在javascript中嵌入php脚本?
【发布时间】:2012-01-03 21:16:02
【问题描述】:

我想知道是否可以在javascript[1] 中包含php 脚本,就像在html[2] 中一样

server.php:
<?php
    echo 'hello World';
?>

client.js(或必要时的 client.php):

function foo() {
    var i = <?php include('server.php'); ?>
    console.log( i );
}

如果可以做到,并且如果必须改用client.php,我也非常感谢index.html/index.php 的最小示例,因为我想看看我将如何包含client,因为它是php 文件而不是 javascript

【问题讨论】:

  • 服务器端包含只获取“包含”PHP 文件的输出。要对 JavaScript 执行相同操作,请使用 AJAX。在你的环境中可以使用 jQuery 吗?
  • "client.js (or client.php if necessary)" -> 是的,我想...你需要引用你的字符串,比如var i = '&lt;?php include('server.php'); ?&gt;';

标签: php javascript html include


【解决方案1】:

您可以使用输出缓冲来实现类似的功能,但无法将 PHP 代码直接嵌入 JS。

示例:

server.php

<?php
    echo 'hello World';
?>

client.php - (.php 扩展名可以解析 PHP 标签,但真正输出的是 JS)

<?php
header("Content-type: application/x-javascript"); // Or 'text/javascript'
ob_start();
include( 'server.php');
$i = ob_get_contents();
ob_end_clean();
?>
function foo() {
    var i = '<?= json_encode( $i); ?>';
    console.log( i );
}

编辑: 如果 server.php 文件只会返回一个简单的字符串,那么您可以修改 client.php 的代码。请注意我所说的“返回”而不是输出 - 如果您的 server.php 输出任何内容,它将作为输出发送到浏览器(不是您想要的)。或者,您可以在 server.php 中设置一个变量,该变量会在 client.php 中输出,或者将您的代码封装在一个函数中:

server.php

<?php
function js_output()
{
    return 'hello world';
}
?>

client.php

<?php
header("Content-type: application/x-javascript"); // Or 'text/javascript'
?>
function foo() {
    var i = '<?php include( 'server.php'); echo addslashes( js_output()); ?>';
    console.log( i );
}

注意:您可能还想添加对html_entitieshtmlspecialchars 的呼叫。

【讨论】:

  • 我希望在服务器端执行代码并嵌入返回值
  • 这正是将会发生的事情——当客户端请求client.php时,服务器将执行client.php顶部的PHP块,其中包括server.php 文件,执行它,将其输出存储到名为 $i 的变量中,然后使用 JSON 将该值嵌入到 JS 变量 i 中。
  • 只是我不想在我的javascript中放置大块的php代码。是否不可能将 php 放在其他地方,让它返回/回显一个值,然后在 client.php 中使用 &lt;?php include('server.php')?&gt;
  • 这真的取决于你的脚本输出什么 - 如果它只是一个整数或一个简单的字符串,那么上面可以简化。我的示例适用于 server.php. 生成的任何输出
  • 是的,你的例子也适用于我!谢谢,我会看看我在尝试将它合并到我的示例中做错了什么
【解决方案2】:

它必须是一个 .php 文件。您需要将此设置为 client.php 中的第一行:

header("Content-type: text/javascript");

然后,您可以像这样创建文件,然后将其包含在内,并将其用作常规 javascript 文件。所以使用 &lt;script&gt; 标签,因为它现在被识别为 JavaScript

【讨论】:

  • 所以基本上服务器足够聪明地意识到它是一个“.php”文件,而客户端被欺骗认为它是一个“.js”文件。
  • 能否给我一个例子,我可以在一个简单的&lt;script type="text/javascript" src="client.php"&gt;&lt;/script&gt; 场景中使用
【解决方案3】:

要将 PHP 嵌入到文件中,服务器需要通过 PHP 解析器传递它,并且它只会对被告知包含 PHP 标记的文件类型(即 .php 文件)执行此操作。您也可以告诉服务器解析 js 文件,但我不确定 mime 类型是否设置正确。它还需要您更改服务器设置。如果您调用 javascript 文件 .php,则 mime 类型肯定是错误的。最兼容的方法是将 javascript 放入 html 文件(即您的 .php 文件)中。如果您想将 .php 文件中的 javascript 数量保持在最低限度,您可以将变量赋值放在 .php 文件中,并将其余部分保留在 javascript 文件中。

server.php:

<script language="javascript">
    var some_var = "<?php echo $SOME_VAR ?>";
</script>

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

client.js:

alert(some_var);

(全局)javascript 变量 some_var 将设置为 PHP 变量 $SOME_VAR 设置的任何值。设置字符串值时不要忘记引号。此外,如果 PHP 代码包含错误,您可能会污染 javascript 代码,因此在执行此操作时必须非常小心。

【讨论】:

    【解决方案4】:

    最简单的做法是使用 client.php 而不是 client.js,因为您的服务器会自动通过 PHP 解释器发送一个 .php 文件。从技术上讲,您可以重新配置服务器以对 .js 文件执行此操作,但我不建议这样做。

    在向用户输出任何内容之前,client.php 文件应该包含这一行:

    header("Content-type: text/javascript");
    

    至于一个基本的 index.html/index.php 例子:

    <html>
    <head>
    <title>Example</title>
    <script type="text/javascript" src="client.php"></script>
    </head>
    <body>
    ...
    </body>
    </html>
    

    更新: 示例 client.php 文件:

    <?php
        header("Content-type: text/javascript"); // This bit must come first!
    ?>
    var i = "<?php echo $somevar; ?>" // This is JavaScript code with some PHP embedded.
    

    【讨论】:

    • 我并不是要忘恩负义,但是很多回复对我来说还不够愚蠢 =P 例如,我是否应该在整个 javascript 语句周围都有&lt;?php...?&gt;header("Content-type: text/javascript"); 出现在 &lt;?php...?&gt; 之后,对吗?
    • header(...); 语句直接出现在开头的&lt;?php 之后,并且必须 是第一个输出(即它必须出现在文件中的任何 html 或 javascript 之前)。我将使用示例 client.php 文件更新我的答案。
    【解决方案5】:

    我在 PHP 5.5 上测试了这个解决方案。
    1. 创建一个名为 myScript.php 的文件。

    // myScrpt.php 内容:

    <?php 
    $fname = "Jason";
    $lname = "Kent";
    ?>
    
    1. 创建一个名为 test.php 的文件。

    // test.php 内容:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Include php Script</title>
    
    <script type="text/javascript">
    <?php include 'myScript.php'; ?>
    </script>
    
    </head>
    

    <h1>The result is:</h1>
    <?php
    echo "My full name is $fname $lname.";
    ?>
    
    </body>
    </html> 
    
    1. 当你在浏览器中打开 test.php 时,你会得到:

    我的全名是杰森·肯特。

    【讨论】:

      【解决方案6】:

      您不能让客户端加载 PHP。你可以做到这一点的唯一方法是在 server.php 上拥有

      <html>
          <head>
                <script type="text/javascript">
                function foo() {
                   var i = <?php echo 'hello World'; ?>
                    console.log( i );
                 }
                </script>
          </head>
          <body>
          </body>
      </html>
      

      基本上将 javascript 加载到页面正文中。或者替代。

       <html>
          <head>
                <script type="text/javascript">
                   var i = <?php echo 'hello World'; ?>
                </script>
                <script type="text/javascript" src="client.js">
          </head>
          <body>
          </body>
      </html>
      

      在 client.js 中

      function foo() {
         console.log( i );
      }
      

      本质上变量 i 可以作为页面上的全局变量加载

      或者正如另一篇文章所建议的,将 php 文件伪装成 js。

      【讨论】:

      • 这会导致 JS 代码:var i = hello World;,这(显然)是无效的语法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2011-03-22
      • 2017-08-17
      • 2013-09-08
      • 1970-01-01
      • 2011-02-27
      • 2013-10-05
      相关资源
      最近更新 更多