1

このメソッドは、単一のphpファイルで正常に機能します。

したがって、私のhtmlページでは、jsを使用してphpファイルを呼び出し、googleprettifyでコンテンツを強調表示しようとしています。

<!DOCTYPE html>
<html lang="en">
<head>
<link href="googleprettify/prettify.css" type="text/css" rel="stylesheet" />

<script src="googleprettify/prettify.js" type="text/javascript"></script>   
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;


    }
  }
xmlhttp.open("GET","callback_json.php",true);
xmlhttp.send();

}
</script>
   </head>

  <body onload="prettyPrint()" >

  <button onclick="loadXMLDoc();">Get Data</button>
<div id="...">
<pre class='prettyprint;'> 
    function foo()
    {
        if (counter == 10)
            return;
        // it works!
    }</pre>
</div>



<div id="myDiv">
need to be replaced
</div>
 </body>

</html>

最初のコードは問題なく動作しますが、phpファイルを呼び出すと

<?php
  $ch = curl_init();
  $url='someurl';
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);

  echo '<pre class="prettyprint;"> ';
  echo $data;
  echo "</pre>";?>

また、返されるコードは強調表示できません。ボディonload="prettyPrint()"に問題があるのではないかと思います。なぜなら、prettyprint()はページがロードされたときにのみ実行されるからですが、これについてはよくわかりません。または、コード構造に問題がありますか?または、ページ全体をロードせずに、prettyprint関数を再度ロードする方法はありますか?

4

1 に答える 1

0

DOMを更新した後、prettyPrint()もう一度呼び出します。そうしないと、新しいHTMLを挿入しただけで、プリティフィケーションは実行されませんでした。

...
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
      prettyPrint();
      ^^^^^^^^^^^^^^
于 2012-11-02T01:04:44.867 に答える