如何在不点击或从php加载事件的情况下执行javascript


How to execute javascript without click or onload event from php?

我有一个名为func.js的javascript,因为有一个函数名为show,它有两个参数,我需要做的是我想从php调用该函数,我不能在这里使用任何点击或加载事件,我的脚本看起来像这个

   <html>
   <head></head>
   <script type='text/javascript' src='path/to/func.js'></script>
   <body>
        some div etc
   <form method='post' action="" >
       .....
       .....
   </form>
   </body>
   </html>
   <!-- after submit of form validation is in php -->
   <?php
       /* here I want to call javascript, where arguments are php variables 
            show('argument1','argument2'); */
       // I tried to echo like this
        echo "<script>show('$argument1',$argument2')</script>";
   ?>

那么,我的案子有什么解决方案呢?

您拥有的代码应该在大多数情况下都能工作。不幸的是,您没有告诉我们为什么它不起作用-是否存在PHP错误?是否存在JS错误?--您还没有向我们展示PHP输出的JavaScript,也没有展示变量的内容,所以我们可以自己弄清楚。

对这个问题最有可能的两种解释(也是我目前唯一想到的(是:

变量中的数据有问题

变量包含不能出现在JavaScript字符串中的字符或必须在JavaScript字符串内转义的'字符。

JSON是JavaScript的一个子集,json_encode函数将转义(并引用(大多数数据,因此它适合在JS中使用。

<script>
show(<?php echo json_encode($argument1); ?>, <?php echo json_encode($argument2); ?>)
</script>

你的时间安排有问题

您有一条HTML注释,上面写着"表单验证提交后在php中",但您共享的代码中没有任何内容可以强制执行这一点。

您需要在脚本的生成过程中使用类似if (isset($_POST['some_data_from_your_form'])) { ... }的内容,以便它只在提交表单时显示,而不是在最初加载表单时显示。


如果这不起作用,那么您确实需要查看变量是什么,生成的JS是什么,以及JavaScript错误控制台显示了什么。


HTML元素结束后不允许使用脚本元素。虽然浏览器会从错误中恢复,但您确实应该将脚本移动到BODY中。

这可能与参数中的数据有关,它是什么类型的数据?

echo "<script>show('".str_replace("'", "''", $argument1)."', '".str_replace("'", "''", $argument2)."')</script>";

如果您正在传递J'min之类的信息,则会导致问题。数据是否有多行?然后需要对其进行过滤。

首先,您的标签已损坏

<script type='text/javascript' href='path/to/func.js'</script>

您应该将href更改为src,然后关闭脚本标记,使其成为

<script type='text/javascript' src='path/to/func.js'>

此外,javascript是客户端的,这意味着您不能在PHP中调用javascript函数。

我认为一个好的解决方案是使用AJAX调用来验证您的表单。

你试过把参数放在引号之外吗?

echo "<script>show('".$argument1."', '".$argument2."')</script>";
echo '<script type="text/javascript">show(' . $argument1 . ',' . $argument2 . ');</script>';

以上内容可能对您有用。