所以我遇到了一个问题,我无法在任何地方找到一个好的解决方案。而且我确定会有更多人遇到这个问题。
我尝试对php脚本进行Ajax脚本调用,该脚本再次回显JavaScript函数,但此函数不会运行或激活。但是,如果你检查元素,它会显示在代码中。
所以html和Ajax如下所示。它自己的虚拟代码有点复杂。所以我在这里做的任何语法错误都不是解决方案,因为这适用于我的代码的其他部分。
<html><headbodyetc>
<div id='change'>
//is supposed to alert or call another js function after
//verifying something with a database for instance.
<button type='button' onclick='ajaxbelow();'>alert</button>
</div>
<script type='text/javascript'>
function ajaxbelow(){
//AJAX code as found on w3schools.com/php/php_ajax_php.asp
//calls the change.php
</script>
</etc></html>
调用的php代码非常简单。
//This shows up in the html-code after clicking the button but doesnt run.
echo"<script type='text/javascript'>alert('doenst work?')</script>";
所以我正在寻找一种解决方案,使我能够在Ajax调用之后运行JavaScript或jquery函数,或者说这不起作用的主要原因。因为我无法找到它。
Inb4为什么通过php调用警报?因为我需要在实际代码中首先使用服务器端的db验证某些内容。
答案 0 :(得分:2)
所以在结合并测试了一些评论后,我想出了自己的答案。 你不能在php echo中创建新的javascript。但是,您可以回显调用现有函数的onload。 Onload仅适用于以下标记:
&#34; body&#34;,&#34; frame&#34;,&#34; frameset&#34;,&#34; iframe&#34;,&#34; img&#34;,&# 34;输入类型=&#34;图像&#34;,&#34;链接&#34;,&#34;脚本&#34;,&#34;样式&#34;。
然而在这种情况下,在测试其中一些像&#34; script&#34;和&#34; img&#34;它仍然不适用于所有标签,但是它采用了&#34;样式&#34;标签。我没有测试所有其他标签。
因此我将代码更改为:
<html><headbodyetc>
<div id='change'>
//is supposed to alert or call another js function after
//verifying something with a database for instance.
<button type='button' onclick='ajaxbelow();'>alert</button>
</div>
<script type='text/javascript'>
//function to be called
function test(){
alert("now it works");
}
function ajaxbelow(){
//AJAX code as found on w3schools.com/php/php_ajax_php.asp
//calls the change.php
</script>
</etc></html>
然后php代码将成为
echo"<style onload='test();'></style>";
现在它确实运行了该功能。
编辑这个似乎不适用于IE,现在正在寻找解决方案。
^ 编辑:默认情况下,IE浏览器&#34; DENY&#34;脚本抛出提示的能力。因此,要启用此功能,您必须转到[工具/ Internet选项/安全/自定义级别/&#34;允许网站使用脚本化窗口提示信息&#34;]并启用...一旦刷新,您将在IE中看到你的警报:)
答案 1 :(得分:0)
只需在单引号前添加斜杠,如下所示
<?php echo '<script type="text/javascript">alert(\'doenst work?\')</script>'; ?>
答案 2 :(得分:0)
您可以使用eval()来评估返回的javascript。如果使用此方法,则不需要脚本标记。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
答案 3 :(得分:-1)
试试这个:
http://www.webdeveloper.com/forum/showthread.php?184830-Ajax-echo-script-problem
基本上没有任何反应的原因是因为你只是在DOM中粘贴内容。 Javascript是一种事件驱动的语言,因为没有任何东西告诉javascript在这一点上运行,它只是坐在那里什么都不做。如果在浏览器加载页面时存在该代码,则解析代码的浏览器将告诉它运行。所以,你需要做的是评估任何回来的脚本