【问题标题】:Javascript not working when echo'd by php由 php 回显时,Javascript 不起作用
【发布时间】:2015-01-01 17:44:38
【问题描述】:

当我回显这个时我遇到了问题:

echo "Logged in! <script> alert('hello'); </script>";

消息“登录!”出现,但不是警报。我该如何解决它,以便我收到警报?我不能使用header();,因为我已经回显了!

我还尝试了多种方法,例如:

echo "Test message <script> window.location.href = 'index.php';"

同样的事情,测试消息被回显,但脚本没有运行。

希望有人能帮帮我!

编辑:

注意:所有这些代码都在一个 xml 文件中,我得到该响应并将其放在一个 div 中。所以脚本在我通过 responseXML 获得的消息中,并在 div 中输出数据。

我在 1 句话中提出的问题:如何在没有 jquery 的情况下在 ajax 调用中运行 javascript 函数?

【问题讨论】:

  • 在文件开头添加ob_start();,然后就可以使用header(..);
  • 你只输出这个吗?您是否尝试在其周围添加“基础”html 标签? (w3schools.com/tags/tag_html.asp)
  • 我在一个包含很多 html 的大 html 文件中输出它。我在特定的 div 中输出它。
  • ob_start(); 不适合我...?代码:ob_start(): echo "Logged in!"; header("Location: http://google.com");
  • 页面中还有其他javascript吗?也许其中一个可能导致错误,使浏览器停止执行页面上的所有其他 javascript。

标签: javascript php alert


【解决方案1】:

您的 PHP 看起来不错,但您可能需要更改收集 JavaScript 的方式。

考虑这个例子: http://jsfiddle.net/0vcewvkc/1/

如果您只收集 JavaScript,您可以将响应包装在 jQuery 标记 ($()) 中,然后将其附加到您的文档中。

$("#go").click(function() {  // call the function here
    // your ajax code would go here, but either way you will end up with a string of JavaScript
    var response = '<script>alert("hi");</' + 'script>';

    // use jQuery to append this script to your document's body, like so:
    $(response).appendTo(document.body)        
});

更新

要在没有 jQuery 的情况下执行此操作,您的 AJAX 调用的结尾将包含以下代码:

    var response = 'alert("hi");';  // note that we have removed the <script> tag
    var s = document.createElement("script"); 
    s.innerHTML = response;
    document.getElementsByTagName('body')[0].appendChild(s);

【讨论】:

  • 你需要用 jquery 做这个吗?因为我已经用普通的 javascript 完成了所有事情......
  • @Nytrix 我刚刚用非 jQuery 选项更新了我的答案。你可以在这里看到它的实际效果:jsfiddle.net/0vcewvkc/2。我用 jQuery 完成了按钮单击,但是没有它内部代码应该可以正常工作。
  • 我可能没有做对,但是当我这样做时:echo "Logged in!"; echo " &lt;script&gt; var response = alert(''); var s = document.createElement('script'); s.innerHTML = response; document.getElementById('outputLogin').appendChild(s); &lt;/script&gt; ";
  • @Nytrix :“AJAX 调用”是指获取 responseXML 的代码,而不是 responseXML 本身的代码。我的代码应该添加到调用页面(第 1 页,来自我上面的评论)。第 2 页应该只回显您要执行的 JavaScript(而不是任何测试文本,例如“登录!”)。修改您的问题以包含第 1 页中的代码可能会有所帮助。
【解决方案2】:

我猜你在页面加载后通过 ajax 调用这个脚本。在这种情况下,脚本没有运行也就不足为奇了,因为浏览器会在读取脚本时运行脚本,并且不会等待另一个脚本标签出现。

如果是这种情况,您可以通过添加一些事件侦听器来解决此问题,或者更好的是,在 ajax 响应的末尾调用所需的函数。

【讨论】:

  • 如果没有 jquery 而使用普通的 javascript,想要的函数如何工作?对不起,我对 ajax 很陌生
  • @LoganMurphy 你是对的,你的例子很完美。然而,重要的是要提到,虽然添加 DOM 脚本元素有效,但将脚本添加为纯文本不会产生相同的结果。
  • append方法创建一个DOM元素,和纯js一样
【解决方案3】:

尝试以下这应该可以工作

<?php 
echo 'Logged in ';
?>
<script> alert("hello")</script>;
<?php
  // the rest of your php code
?>

【讨论】:

  • @Nytrix 对不起,我无法帮助你,我的知识仅限于 php mysql js 和 css,但你可以尝试谷歌搜索
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 2014-01-09
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多