2011-12-02 49 views
2

我有一個小問題,通過PHP動態回顯JavaScript。這裏是我的代碼由PHP PHP echo'd不運行

$url = "http://www.newsite.com"; 

echo " 
    <html> 
    <head> 
    <title>Redirecting</title> 
    </head> 
    <body onload='redirect()'> 
     Not Logged In 

     <script type = 'text/javascript'> 
    function redirect() { 
     window.location=".$url." 
     } 
    </script> 
    </body> 
    </html> 
    "; 

我的JavaScript控制檯告訴我,「重定向()」不能被發現(未捕獲的ReferenceError:重定向沒有定義)

任何想法是什麼引起的?

+0

也許window.location ='「。$ url。」' –

回答

4

您錯過了一個引號。這將解決您的問題:

function redirect() { 
    window.location='".$url."'; 
} 

目前,如下的頁面就會出現(注意去掉引號/語法錯誤):

function redirect() { 
    window.location=http://www.newsite.com; 
} 
+0

就是這樣。我知道這是愚蠢的:)我會盡快接受你的回答! (這是5分鐘明顯>>) – Esaevian

+0

我的答案回答你的問題,但你應該考慮Tomalak提供的方法。尤其對於重定向,您應該使用標頭方法。如果沒有,至少在文檔中添加一個鏈接,以防用戶禁用JavaScript(例如通過[NoScript](http://noscript.net)) –

+2

在代碼的宏觀模式中,這是不可能的,因爲這將運行在iframe中(我將運行這個服務的要求),並且我需要訪問'top'窗口位置,'header'只會影響iframe。 但是,我確實同意他的方法是一種更好的方法,但是Javascript現在是必需的。 – Esaevian

1

你應該把這個函數在標題區ANE把它包像這樣。

echo " 
    <html> 
    <head> 
    <title>Redirecting</title> 
    <script type = 'text/javascript'> 
    function redirect() { 
     window.location='".$url."."' 
     } 
    </script> 
    </head> 
    <body onload='redirect()'> 
     Not Logged In 


    </body> 
    </html> 
    "; 
5

完全刪除基於客戶端的重定向。使用方法:

header("HTTP/1.0 302 Moved Temporarily"); 
header("Location: $url"); 
+0

對不起,我沒有指定(因爲它是一種超出了一般問題的範圍),但我需要JavaScript,因爲這將運行內部和iframe,並且'header'調用只會影響iframe的位置,而我需要修改'top'位置(將更新我的js以修改top,我將其更改爲'window'只是爲了確保'top'由於某種原因不是問題(可能不是調試的最佳方法... ) – Esaevian

+0

那麼,在這種情況下...... :) – Tomalak

2

代碼有問題。

window.location=".$url." 

應該

window.location=\"".$url."\" 
0

由於@Tomalak說,你不應該使用JavaScript來解決這個問題。使用服務器重定向。

但是,有一個更一般的問題與獲取PHP數據到JavaScript。我會在這裏解決這個問題。

對於javascript和html,您都需要正確轉義$url參數。 redirect()未定義,因爲其中存在語法錯誤。

無論何時您需要將javascript數據內聯傳遞到html,請使用以下模式。這是做到這一點的最明確,最安全的方式。

<?php 
// 1. put all the data you want into a single object 
$data = compact($url); 
// $data === array('url'=>'http://example.org') 

// 2. Convert that object to json 
$jsdata = json_encode($url); 

// 3. html-escape it for inclusion in a script tag 
$escjsdata = htmlspecialchars($jsdata, ENT_NOQUOTES, 'utf-8'); 
// change utf-8 to whatever encoding you are using in your html.' 
// I hope for your sanity you are using utf-8! 

// 4. Now assign $escjsdata to a js variable in your html: 

?> 
<html> 
<head> 
<title>Redirecting</title> 
</head> 
<body onload='redirect()'> 
    Not Logged In 

    <script type = 'text/javascript'> 
    function redirect() { 
     var data = <?php echo $escjsdata ?>; 

     window.location=data.url; 
    } 
</script> 
</body> 
</html>