0

問題を説明するのに苦労しているので、少しずつ説明します。不明な点がありましたらご容赦ください。

問題:インクルードされたファイルにあるdivを更新しようとしています:

div id ='home'のindex.phpページがあります(適切なjqueryファイルはすべてindex.phpのheadセクションで呼び出されます。index.phpページには次のjavascriptトリガーがあります。

<a href="javascript: MyAjaxRequest('home','random2.php')">Random Number times 10</a>

これにより、div id='home'のリロードがトリガーされます。div id ='home'を以下に示します(ヘッダーの目的がわかりません-ヘッダーありとなしで試しました):

<div id='home'>

    <?php
        header("Content-Type: text/html; charset=ISO-8859-15");
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
    ?>

    <script type="text/javascript">
        function homeloader(){
        var xmlHttp;
        try{
            xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
        }
        catch (e){
            try{
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
             }
             catch (e){
                 try{
                     xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
                  }
                  catch (e){
                      alert("No AJAX");
                      return false;
                  }
             }
         }

         xmlHttp.onreadystatechange=function(){
            if(xmlHttp.readyState==4){
            document.getElementById('homeload').innerHTML=xmlHttp.responseText;
            setTimeout('homeloader()',10000); // JavaScript function calls AutoRefresh() every 10 seconds
            }
         }
         xmlHttp.open("GET","random.php",true);
         xmlHttp.send(null);
       }

       homeloader();

    </script>

    <div id='homeload'>
        <font size='1em'>
        Random Number:&nbsp;

        <?php
            include "random.php";
        ?>
        </font>
    </div>

</div>

ajaxは、sub div id ='homeload'のコンテンツを、random.php(この投稿の下部にある単純な乱数ジェネレーター)の結果で更新することになっています。

今、トラブルが始まります。

上記のhref='javascript...が起動されると、random2.phpをdiv id ='home'にロードする必要があります(random3.phpと別のajax関数が含まれています-キーワードが変更された同じ関数です(キャッチを残してみました( e)そして以下のように(f)をキャッチするように変更します)これにはrandom3.phpが含まれていますが、random2.phpのajaxはsub div id ='homeload2'もrandom3.phpの結果で更新する必要があります( 't)。random3.phpが含まれていますが、更新されません。

これがrandom2.phpです(ここでも、ヘッダーが何のためにあるのかわかりません-それらはajaxに付属しています-私はそれらの有無にかかわらず試しました):

<?php
    header("Content-Type: text/html; charset=ISO-8859-15");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
?>

<script type="text/javascript">
  function homeload2(){
    var xmlHttp2;
    try{
      xmlHttp2=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
    }
    catch (f){
      try{
        xmlHttp2=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
      }
      catch (f){
        try{
          xmlHttp2=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (f){
          alert("No AJAX");
          return false;
        }
      }
    }

    xmlHttp2.onreadystatechange=function(){
      if(xmlHttp2.readyState==4){
        document.getElementById('homeload2').innerHTML=xmlHttp2.responseText;
        setTimeout('homeload2()',10000); // JavaScript function calls AutoRefresh() every 10 seconds
      }
    }
    xmlHttp2.open("GET","random3.php",true);
    xmlHttp2.send(null);
  }

  homeload2();

</script>

<div id='homeload2'>
    <font size='1em'>
    Random Number times 10:&nbsp;
    <?php
        include "random3.php";
    ?>
    </font>
</div>

最後に、random.phpの簡単なコードを示します。

<?php
    $c = rand(1,10);
    echo $c;
?>

およびrandom3.php:

<?php
    $c2 = rand(1,10);
    $c3 = $c2*10;
    echo $c3;
?>

したがって、問題は、random2.phpがrandom2.phpをdiv id='home'に含めることになっていることです。します。ただし、random2.phpのajaxは、sub div id='homeload2'をrandom3.phpの結果で更新する必要があります。そうではありません。

random3.phpが含まれていますが、div id='homeload2'は更新されません。

(ブラウザにファイルをロードするだけで)random2.phpを単独でテストしましたが、正常に更新されます。テストサーバーとデプロイメントサーバーでも試してみました。どちらの場合も、ファイルがソロでロードされると更新されますが、上記のコンテキストで(インクルードファイルとして)ロードされると、インクルードとしてロードされますが、更新されません。

私はajaxを初めて使用し、このコードをチュートリアルから外しました(同じコードをいくつかの場所で見ました)。また、他のajaxテクニック(同じ目的のための他の定式化)を試しましたが、同じ結果が得られました-インクルードロードですが、更新されません。違いが出るとは思いませんでしたが、require-を使ってみましたが無駄になりました。ライブラリ呼び出し(src = ... jquery ...)をrandom2.phpに挿入しようとしましたが、それは役に立ちませんでした。

私はページを広範囲に分析して検査しようとしたので、いくつかのタイプミスを除いて(私のテストではそうではないことを示唆しています、2回目の更新を試みることによって破っている基本的なルールがあると思いますが、私は見ることができませんそれが問題です。2番目の関数が妨げられるのはなぜですか?javascript hrefを介して含まれているときに、関数が実際に読み込まれないことについて何かありますか?ヘッダーなどについて何かありますか?

スクリプトにはいくつかのphpヘッダーコマンド(上記)も含まれていますが、これは私にはわかりませんが、それが問題であるかどうかを確認するために削除してみました。変わりはない。

random2、phpのajax関数は、インクルードされたファイル(random2.php)に配置されているため、何らかの形で壊れていると結論付けることしかできません。私の控除はどこかで間違った方向に進んだと確信していますが、どこですか?

私は解決策についてかなりの量の調査を行いましたが、私の問題は、より多くの情報を取得するためにグーグル検索クエリを定式化する方法が本当にわからないことです。私の特定のパズル。「div2を更新する方法には、次の行が含まれます」?

だから私はここに投稿しています。

私が見逃している根本的な何かがあると確信しています。

誰か助けていただければ幸いです。前もって感謝します。

4

2 に答える 2

0

の定義と呼び出しはhomeloader、ajax によってロードされるべきではありません。ヘッダーに関しては、最初のヘッダーはブラウザーに何をロードするかを伝え、もう 1 つはキャッシュ部分を処理します。

ブラウザーは、非同期でロードされた JavaScript をコンパイルしません。タグを使用してロードする<script>か、実際にそのページ/div にのみロードする必要がある場合は、別のファイルからロードしてeval、ブラウザに強制的にコードをコンパイルさせるために呼び出します。ただし eval、リスクが高い可能性があるため、最初のオプションを選択します。

于 2012-04-24T16:53:34.410 に答える
0

.php ファイルがブラウザによってローカルにキャッシュされている可能性があります。リクエストにクエリ文字列パラメーターを追加することを検討してください。

var randomnumber=Math.floor(Math.random()*11);

xmlHttp2.open("GET","random3.php?someVar="+randomnumber,true);

このようにして、常に「新しい」ファイルが要求されます。

編集: AJAX を処理するたびに必ず乱数を生成してください。目的は「新しいリクエスト」を作成することなので、リクエストを行う前に毎回乱数コードが実行/計算されます。

編集: また、インクルードはサーバー側のディレクティブであるため、実行時に DOM が完全ではない可能性があります。

編集2:これを試してください

<?php
    header("Content-Type: text/html; charset=ISO-8859-15");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
?>

<script type="text/javascript">
  function homeload2(){
    var xmlHttp2;
    try{
      xmlHttp2=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
    }
    catch (f){
      try{
        xmlHttp2=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
      }
      catch (f){
        try{
          xmlHttp2=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (f){
          alert("No AJAX");
          return false;
        }
      }
    }

    xmlHttp2.onreadystatechange=function(){
      if(xmlHttp2.readyState==4){
        document.getElementById('homeload2').innerHTML=xmlHttp2.responseText;
        setTimeout('homeload2()',10000); // JavaScript function calls AutoRefresh() every 10 seconds
      }
    }
    xmlHttp2.open("GET","random3.php",true);
    xmlHttp2.send(null);
  }

  // don't call Homeload here     
</script>

<div id='homeload2'>
    <font size='1em'>
    Random Number times 10:&nbsp;
    <?php
        include "random3.php";
    ?>
    </font>
</div>
<script>
// call it here
homeload2();

</script>
于 2012-04-24T16:35:03.650 に答える