2016-05-18 99 views
0

以下是这种情况: 我试图在没有重新加载整个文档的情况下单击菜单链接时更改页面标题和内容。 到目前为止,更改内容就像一个魅力。但是我在改变标题时遇到了一些问题。在PHP中使用javascript更改页面标题'if'

下面是代码,所以我可以理解,当我解释一下:

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页面的基础。

The double foreach loop skims $lesMenus array for rq's counterpart。

现在的问题是if (isset($newTitle))里面的脚本不能播放。其他一切都做了(我已经试过echo $newTitle;这样做,页面的内容根据要求而改变,但脚本不能播放,即使是该脚本内部的简单Hello世界也不会发生。搜索计算器和网络的方式来播放javaScript的PHP内,这是什么似乎替别人打工,但在我的情况并非如此。

任何指针?:)

感谢您阅读我,

Chris(IT Student)

+0

JS在页面加载时呈现...所以我不认为将它添加到脚本就会触发它。尝试在匿名函数调用或settimeout函数中调用它 –

+0

@NishanthMatha因此,而不是在index.php页面中更改标题,将其更改为在单击菜单链接时调用的函数中?我会尝试 –

+0

绝对肯定它的JavaScript没有运行?据我所知,如果'newTitle'是'“Home”',则插入的javascript将是'document.title = Home;',它将查找“Home”变量而不是将“document.title”设置为字符串“Home” –

回答

1

简单地将脚本添加到DOM不会导致它执行。所以你需要以某种方式调用它,也许把它包装在一个函数中并按名称调用它。

但是,如果你要你做的http请求后,要做到这一点,你不妨回声只有newTitle的和更新:

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:

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变量这样的改变:

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

,并在其后用JavaScript更改如下:

document.title = jTitle; 

它导致降低SEO排名。标题是SEO中的重要标签。 注意这一点。