在JavaScript(.js)文件中包含PHP

Gre*_*egH 40 javascript php

我有一个包含多个JavaScript函数的JavaScript文件(扩展名.js,而不是.html).

我想调用PHP文件中的一个PHP函数,该文件只包含一个JavaScript函数中的几个PHP函数.

  • 那可能吗?
  • 我是否需要在.php文件中"包含" 包含PHP函数的.js文件?
  • 我该怎么办?
    例如,假设我有一个名为myLib.php的文件,其中包含一个带有myFunc两个参数(param1param2)的函数.然后我有一个.js包含一个名为的函数的文件myJsFunc.如何myFuncmyJsFunc(JavaScript函数)中调用(PHP )?我不需要在文件中以某种方式包含PHP .js文件吗?

sgr*_*rif 54

7年后更新:这是一个糟糕的建议.请不要这样做.

如果你只需要将变量从PHP传递给javascript,你可以在php/html文件中使用javascript来开始标记.

<script type="text/javascript">
    phpVars = new Array();
    <?php foreach($vars as $var) {
        echo 'phpVars.push("' . $var . '");';
    };
    ?>
</script>
<script type="text/javascript" src="yourScriptThatUsesPHPVars.js"></script>
Run Code Online (Sandbox Code Playgroud)

如果您正在尝试调用函数,那么您可以这样做

<script type="text/javascript" src="YourFunctions.js"></script>
<script type="text/javascript">
    functionOne(<?php echo implode(', ', $arrayWithVars); ?>);
    functionTwo(<?php echo $moreVars; ?>, <?php echo $evenMoreVars; ?>);
</script>
Run Code Online (Sandbox Code Playgroud)

  • 这已经将近6年了,而且这种情况偶尔也会被提升.这绝对是可怕的建议.你应该强烈考虑*为什么*你需要这样做,并考虑另一种结构.如果这些变量随着时间的推移而发生变化,那么可能会创建一个代表您需要的AJAX端点.如果它们在请求时真的唯一重要,那么至少为每个变量创建一个`<meta>`标签并读取它,而不是用PHP吐出来生成JavaScript. (9认同)
  • 它完全没有意义,注射也很容易.`phpvars = <?php echo json_encode($ vars); `>;`保证生成语法正确的JS,而如果在插入的文本中的任何地方都有单个`'或其他JS元字符,则上述将终止整个脚本块. (2认同)
  • 推荐给您,:B-因为它是一个被高度推荐的答案,所以也许可以将替代方案(更好的解决方案)作为答案的一部分,而不仅仅是评论? (2认同)

小智 24

AddType application/x-httpd-php .js

AddHandler x-httpd-php5 .js

<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)

在.htaccess文件中添加上面的代码,并在js文件中运行php

危险:这将允许客户端可能看到PHP文件的内容.如果您的PHP包含任何敏感信息(通常这样做),请不要使用此方法.

如果必须使用PHP生成JavaScript文件,那么请使用纯PHP生成整个JS文件.你可以使用普通的.PHP文件,就像通常输出html一样,区别在于使用PHP的头函数设置正确的头文件,以便将正确的mime类型返回给浏览器.JS的mime类型通常是" application/javascript "

  • 你能解释一下这“将允许客户端潜在地看到你的 PHP 文件的内容吗” (3认同)

Nik*_*kiC 10

PHP和JS不兼容; 你可能不只是在JS中包含一个PHP函数.您可能想要做的是从JavaScript 发出AJAX请求并使用PHP 发送JSON响应.

  • +1你甚至不需要JSON响应,它确实可以是任何东西; 只要您能以有意义的方式解析/使用JS. (6认同)

Sco*_*ard 9

基于Blorgbeard的一个略微修改的版本,用于容易引用的关联php数组到javascript对象文字:

PHP文件(*.php)

首先使用要用于javascript文件的值定义一个数组:

<?php
$phpToJsVars = [
  'value1' => 'foo1',
  'value2' => 'foo2'    
];
?>
Run Code Online (Sandbox Code Playgroud)

现在将php数组值写入javascript对象文字:

<script type="text/javascript">
var phpVars = { 
<?php 
  foreach ($phpToJsVars as $key => $value) {
    echo '  ' . $key . ': ' . '"' . $value . '",' . "\n";  
  }
?>
};
</script>
Run Code Online (Sandbox Code Playgroud)

Javascript文件(*.js)

现在我们可以使用以下符号从任何其他.js文件访问javscript对象文字:

phpVars["value1"]
phpVars["value2"]
Run Code Online (Sandbox Code Playgroud)


Jos*_*iah 6

这有点棘手,因为PHP被评估为服务器端,而javascript被评估为客户端.

我会使用javascript中的AJAX调用来调用您的PHP文件,然后使用JS在页面上的某处插入返回的HTML.


DEV*_*OCB 5

实际上,实现此目的的最佳方法是在 .php 中编写 javascript,并在单独的文件中使用 jquery,以在 javascript 所在的文档中使用 Jquery get 脚本文件或 jquery load 使用 php include 函数。本质上这就是它的外观。

.php 文件扩展名中的动态 Javascript 文件 - 包含由服务器预处理的 php 变量和在脚本中需要这些变量的 javascript 的混合物。

静态 Js 文件 - 使用http://api.jquery.com/jquery.getscript/http://api.jquery.com/load/

在主 html 页面中将静态文件作为常规 js 文件调用。调用静态js文件会强制从服务器加载动态数据。

一些文件.php 1:

<?php
$somevar = "Some Dynamic Data";
?>

$('input').val(<?php echo $somevar?>);
Run Code Online (Sandbox Code Playgroud)

或者只是回显脚本,例如

echo "$('input').val(".$somevar.");";
Run Code Online (Sandbox Code Playgroud)

文件2:somejsfile.js:

$("#result").load( "file.php" );
Run Code Online (Sandbox Code Playgroud)

文件3 myhtml.html:

<script src="somejsfile.js"></script>
Run Code Online (Sandbox Code Playgroud)

我相信这回答了许多想要混合 php 和 javascript 的人的问题。如果数据处理在后台进行,然后让用户等待数据时出现延迟,那就太好了。您还可以绕过第二个文件,只在 html 主页面上使用 php 的 include,这样您的 javascript 就会暴露在主页面上。性能取决于您以及您想要如何处理所有这些。