2016-05-18 6 views
0

状況: ドキュメント全体を再読み込みせずにメニューリンクをクリックしたときにページのタイトルとコンテンツを変更しようとしています。 これまでのところ、内容を変えることは魅力のように機能します。しかし、私はタイトルを変更することにいくつかの問題があります。ここでPHP内でJavaScriptを使用してページタイトルを変更する場合

は、私はそれを説明するときに、私は理解していたコードです:

if (isset($_GET['rq'])) { 
    $rq = $_GET['rq']; 
    foreach($lesMenus as $menuName=>$menuContent){ 
     foreach($menuContent as $name=>$link){ 
      $linkW = substr($link, 0, strpos($link, '.')); 
      if($linkW == $rq){ 
       $newTitle = $name; 
       break; 
      } 
     } 
    } 
    if (isset($newTitle)){ 
     $title = $newTitle; 
     echo("<script type=\"text/javascript\"> 
      document.title =".$newTitle."; 
      </script>"); 
    } 
    $mainContent='You have asked for :'.$rq; 
    echo $mainContent; 
} 
else{ 
    include('INC/layout.html.inc.php'); 
} 

される何が起こる:メニューリンクをクリックすると、関数が呼び出されると、いくつかの仕事の後にこれを行います:xmlhttp.open("GET", "index.php?rq=" + rq , true);

基本的にはindex.phpページの基礎です。

二重foreachループはの配列をrqの対応にスキップします。

ここで問題は、if (isset($newTitle))内のスクリプトが再生されないということです。それ以外は何もしません(私はecho $newTitle;を試しましたが、質問の内容に応じてページの内容が変わりますが、スクリプトは再生されません)。 PHPの内部ではJavaScriptを再生する方法をStackOverflowのとウェブを検索し、これは他の人のために働くように見えたものですが、私の場合にはそれがない。

任意のポインタ?:)私を読み取るための

感謝、

Chris(IT学生)

+0

JSはページの読み込み時にレンダリングされるので、それをトリガーするようなスクリプトにJSを追加するとは思いません。匿名関数呼び出しまたはsettimeout関数で呼び出すことを試みてください –

+0

@NishanthMathaしたがって、index.phpページのタイトルを変更するのではなく、メニューリンクをクリックしたときに呼び出される関数でそれを変更しますか?私はそれを試してみます –

+0

間違いなくそれが実行されていないjavascriptのですか? '$ newTitle'が' 'Home ''ならば、挿入されるjavascriptは 'document.title = Home;' 'document.title'を設定するのではなく' Home'変数を探すでしょう文字列 '' Home "' –

答えて

1

DOMにスクリプトを追加しても、スクリプトは実行されません。だから、何とかそれを関数にラップし、それを名前で呼び出すことによって、何とか呼び出す必要があります。

JS:

<!-- Assuming you have something like this --> 
<script> 
    var xhttp = new XMLHttpRequest(); 

    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      var responseText = xhttp.responseText; 
      document.title = responseText; 
     } 
    }; 

    xhttp.open("GET", "index.php?rq=" + rq , true); 
    xhttp.send(); 

</script> 

はPHP:

あなたはそれ、あなたがかもしれないだけでなく、エコーのみnewTitleの操作を行うと、あなたはhttpリクエストを行った後、それを更新しようとしている場合は

if (isset($newTitle)){ 
    echo($newTitle); 
} 
+0

ありがとうございました私は自分の考え方を変え、私がクリックしていたリンクの '.text'属性を使い、読み込み時にメニューリンクにある関数に' document.title'を使いました( 'xhttp.onreadystatechange'は私はすでにコンテンツを読み込むためにそれを使用していたので正しい方向) ありがとう:) –

+0

クール..!あなたがうまく働いてうれしい。 – BizzyBob

0

PHPで条件チェックを行い、タイトルを$newTitleに保存し、別のブール値$needToChangeTitleを作成することができます。

の代わりに、PHPを使用してスクリプトタグをエコーし​​ます。スクリプトタグをHTML形式で入力し、別の条件チェックを行います。

var needToChangeTitle = "<?php echo $needToChangeTitle ?>"; 
var newTitle = "<?php echo $newTitle ?>"; 
if (needToChangeTitle === "true") { 
    document.title = newTitle; 
} 
1

ページタイトルを変更する方法が異なります。 単にあなたがこのようなjavacsript変数にデータを渡すことによってそれを変更することができます:それはSEOのランクを下げる原因となる

document.title = jTitle; 

しかし:

<script> 
var jTitle=<?= $phpContainnewTitle; ?> 
</script> 

、それはJavaScriptを使用して、以下のように変更した後。タイトルはSEOの重要なタグです。 これに注意してください。

関連する問題