繁体   English   中英

如何在javascript中嵌入php脚本?

[英]How to embed php script in javascript?

我想知道我是否可以在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代码嵌入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的调用。

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

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

然后,您可以像这样创建文件,然后将其包含在内,并将其用作常规javascript文件。 因此,使用<script>标记,因为它现在被识别为JavaScript

最简单的方法是使用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.

为了将PHP嵌入文件中,服务器需要将其传递通过PHP解析器,并且它只会对被告知包含PHP标记的文件类型(即.php文件)进行处理。 您可能会告诉服务器也解析js文件,但是我不确定mime-type是否设置正确。 它还需要您更改服务器设置。 如果调用javascript文件.php,则mime-type肯定是错误的。 最兼容的方法是将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代码,因此在执行此操作时必须格外小心。

我在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时,将获得:

我的全名是Jason Kent。

您不能让客户端加载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 );
}

本质上来说,我可以在页面上将其作为全局变量加载

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM