如何在JavaScript函数中使用PHP

29
<html>
    <?php
        $num = 1;
        echo $num;
    ?>
    <input type="button"
           name="lol" 
           value="Click to increment"
           onclick="Inc()" />
    <br>
    <script>
        function Inc()
        {
        <?php
            $num = 2;
            echo $num;
        ?>
        }
    </script>
</html>

这是我迄今为止的代码,但它并没有起作用,我认为我需要使用ajax或者类似的东西,但我不知道该怎么做。

谢谢


1
简单来说,在javascript函数中不能使用PHP。但是,你可以用PHP生成Javascript代码。 - konsolenfreddy
我认为这是更简洁的方式: https://dev59.com/C2Ag5IYBdhLWcg3wU5gS#70210250 - Mohammad Zaer
9个回答

40

你不能使用Javascript来运行PHP代码。当用户接收页面时,服务器将已经评估和运行了所有的PHP代码,并将其删除。因此,例如这样的代码是可以正常工作的:

alert( <?php echo "\"Hello\""; ?> );

因为服务器会将其评估为:

alert("Hello");

然而,在PHP中你无法对它执行任何操作。

这个:

function Inc()
{
<?php
$num = 2;
echo $num;
?>
}

最终将被评估为:

function Inc()
{
    2
}

如果你想调用一个PHP脚本,你需要调用一个不同的页面,该页面从一组参数返回值。

例如,以下代码可以正常工作:

script.php

$num = $_POST["num"];
echo $num * 2;

在另一个页面上的Javascript(jQuery):

$.post('script.php', { num: 5 }, function(result) { 
   alert(result); 
});

这应该会弹出10。

祝你好运!

编辑:在页面上仅增加一个数字可以通过jQuery轻松完成,例如:http://jsfiddle.net/puVPc/


7
我认为你混淆了服务器端代码和客户端代码。
JavaScript 在接收到来自服务器(如网页)的数据后在客户端上运行。
PHP 在发送数据之前在服务器上运行。
因此,有两种方法可以使用 PHP 与 JavaScript 进行交互。
就像上面所述,您可以像使用 PHP 生成 HTML 一样使用 PHP 生成 JavaScript。
或者您可以使用 AJAX 请求从 JavaScript 与服务器进行交互。服务器可以响应数据,而 JavaScript 可以接收并处理数据。
我建议回到基础知识,学习服务器-客户端关系中 HTTP 的工作原理。然后学习服务器端语言和客户端语言的概念。
然后进行 AJAX 教程,您将开始理解这个概念。
祝你好运,Google 是你的朋友。

3
您在PHP中使用脚本。
<?php

        $num = 1;
        echo $num;

    echo '<input type="button"
           name="lol" 
           value="Click to increment"
           onclick="Inc()" />
    <br>
    <script>
        function Inc()
        {';
            $num = 2;
            echo $num;

        echo '}
    </script>';
?>

它在我的代码上运行良好,但我认为它不够优雅。 - Julian

2

简单来说,你的问题听起来有些不对,因为JavaScript变量需要被输出。

<?php
        $num = 1;
        echo $num;
        echo "<input type='button' value='Click' onclick='readmore()' />";
     echo "<script> function readmore() { document.write('";
        $num = 2;
        echo $num;
        echo "'); } </script>";
?>


1
有一种方法可以在客户端JavaScript中运行PHP(这里不是指服务器端js)。不知道这是否是一个很好的想法,但你可以这样做。正如一些人指出的那样,你必须记住PHP在服务器上被评估,然后作为静态内容返回给浏览器,浏览器将使用来自服务器的添加数据运行JavaScript。
您必须告诉服务器将js文件评估为php文件,如果您正在运行Apache服务器,则可以使用htaccess文件进行此操作,例如:
<FilesMatch "\.js$">
SetHandler application/x-httpd-php
Header set Content-type "application/javascript"
</FilesMatch>

更多信息请参见:

使用htaccess将js/css解析为PHP文件

http://css-tricks.com/snippets/htaccess/use-php-inside-javascript/

编辑:在http页面请求时,此技巧使带有js扩展名的文件被php编译器解析。 js文件中的所有php部分都将被执行,并且添加了服务器数据的js文件将被传递给浏览器。
然而,OP使用的是一个html格式的文件(可能具有php扩展名),没有js文件,因此在这种特定情况下,我的建议是不需要的。
建议使用js解决方案。如果需要将变量存储在服务器上,请使用ajax将其发送到那里。

1
在上述代码中,将 PHP 值分配给 JavaScript 变量。
<html>
<?php
 $num = 1;
 echo $num;
?>
  <input type = "button" name = "lol" value = "Click to increment" onclick = "Inc()">
  <br>
  <script>
   var numeric = <?php echo $num; ?>"; //assigns value of the $num to javascript var             numeric 
  function Inc()
   {
     numeric = eVal(numeric) + 1;
     alert("Increamented value: "+numeric);
   }
  </script>
</html>

PHP和JavaScript的组合中有一件事是你不能将JavaScript值赋给PHP值。你可以将PHP值分配给JavaScript变量。


eval(numeric)?我不认为它应该在这里。numeric++就足够了。 - Dan Lugg

0

尽管有些评论说不应该在JavaScript中访问PHP函数(例如AJAX情况),但在某些情况下确实是必要的。

针对这些情况,您可以使用mwsX库将PHP函数用于JavaScript。

mwsX库: https://github.com/loureirorg/mwsx


0

尝试这个,可能会起作用...

<html>
   <?php $num = 1; ?>
   <div id="Count"><?php echo $num; ?></div>
   <input type = "button" name = "lol" value = "Click to increment" onclick = "Inc()">
   <br>
   <script>
   function Inc() {
       i = parseInt(document.getElementById('Count').innerHTML);
       document.getElementById('Count').innerHTML = i+1;
   }
   </script>
</html>

-1

简单地将其返回:

<html>
    <?php
        $num = 1;
        echo $num;
    ?>
    <input type="button"
       name="lol" 
       value="Click to increment"
       onclick="Inc()" />
    <br>
    <script>
        function Inc()
        {
            Return <?php
            $num = 2;
            echo $num;
            ?>;
        }
    </script>
</html>

大写的返回会抛出一个错误。 - Mr PizzaGuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接