如何在html之后将数据发送到浏览器?

时间:2014-02-01 04:43:47

标签: javascript php html http-headers output-buffering

在服务器应用程序中我正在创建一个我要发送的所有HTML输出的哈希字符串:

ob_start();

?>
<!DOCTYPE HTML>
<html>
...
</html>

<?php

$html = ob_get_clean();

$hash = md5($html);

print $html;
exit;

我怎样才能发送哈希字符串,但是javascript能够以某种方式读取它?

我想在调用print之前用header()添加它但是看起来javascript无法读取页眉,只能在ajax模式下但这不是ajax请求:/

2 个答案:

答案 0 :(得分:0)

您可以将此行添加到您的php脚本中:

echo '<script>var hash = ' . $hash . ';</script>';

然后你的哈希将通过“hash”javascript变量提供。

如果要异步执行此操作,则必须使用AJAX。当您想要执行http请求而无需重新加载整个页面时,AJAX非常有用。我建议你使用JQuery,因为它比ajax调用的javascript更容易。通常,您在用户事件上调用ajax(例如:单击按钮)

JQuery实现的一个例子是:

$('.showHashButton').onclick(function(){
    var pageHtml = $("html").html();
    $.get( "url_to_your_server_script", { html: pageHtml} )
      .done(function( data ) {
        alert(data); //show the hash
      });
});

PHP脚本实现的一个示例:

<?php
echo md5($_GET('html'));
?>

如果您有任何疑问,请在下面发表评论!

答案 1 :(得分:0)

这是使用标准JavaScript的完整工作示例。最终的DIV标记不包含在md5哈希中。阅读脚本中的注释以获取jQuery指令。希望这有帮助!

<?php
ob_start();
?>
<!DOCTYPE HTML>
<html>


<body onLoad="afterLoad();">
<p>...content...</p>
<script>
  // you can also use jQuery(document).ready(function(){...});
  // instead of the onLoad() in body.
  function afterLoad() {
    var md5=document.getElementById('md5hash').innerHTML;
    alert(md5);
  }
</script>
</body>
</html>

<?php

$html = ob_get_clean();

$hash = md5($html);

print $html.'<div id="md5hash" style="visibility: hidden">'.$hash.'</div>';
exit;

?>