2011-06-02 103 views
1

這裏是我的代碼,的JavaScript重定向

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/"+<? $name ?>+"/output.txt"; 
    setTimeout("top.location.href = url",1000); 
</script> 

$namePHP變量,它具有的我想重定向到該目錄的名稱。

不用說,它不工作。它出什麼問題了?我不知道了很多關於javascript所以我可能做了一件愚蠢的

感謝

回答

6

如果您使用JavaScript混合PHP,它總是建議檢查被髮送到瀏覽器的輸出:右鍵點擊你的網站和點擊查看源代碼!

JavaScript不關心發送給它的內容是靜態HTML,來自數據庫還是由PHP生成。如果它在輸出中,它會解析它。

如果你已經這樣做了,你會發現你的$name變量不是echo

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/"+<? echo $name ?>+"/output.txt"; 
    setTimeout("top.location.href = url",1000); 
</script> 

但是,這會給你

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/"+ foo +"/output.txt"; 
    setTimeout("top.location.href = url",1000); 
</script> 

這是不是有效的JavaScript,爲foo現在是一個JS變量,而不是一個字符串。

所以,你應該有:

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt"; 
    setTimeout("top.location.href = url",1000); 
</script> 

此外,傳遞一個字符串setTimeout(或setInterval)不推薦;針對使用eval()同樣的原因,所以你應該結束了,這樣的事情,而不是:

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/<? echo $name ?>/output.txt"; 
    setTimeout(function() { 
     top.location.href = url 
    },1000); 
</script> 
+0

通過一個函數不是字符串,但setTimeout?但在字符串連接修復中爲+1) – 2011-06-02 18:05:27

+0

請閱讀我的「Further」:P – Matt 2011-06-02 18:06:53

+0

對於動詞(echo'ing)+1:D – 2011-06-02 18:07:16

5

傳遞一個函數,而不是一個字符串,以setTimeout

var url = "http://localhost:8888/uploads/<?= $name ?>/output.txt"; 
setTimeout(function() 
{ 
    top.location.href = url; 
}, 1000); 

我假設$name是由PHP正確填寫。

+0

$ name不是。 OP需要使用或<?php echo $ name; ?>,但傳遞一個函數+1 +1 – 2011-06-02 18:04:29

+0

好的,謝謝。我不是一個PHP開發人員... – 2011-06-02 18:08:33

3

試試這個:

setTimeout(function() { top.location.href = url; }, 1000); 
+0

不要忘記OP甚至沒有echo'd :) – 2011-06-02 18:03:58

+0

我只是迴應OP不知道JavaScript的部分。您不應該將字符串傳遞給'setTimeout'。我想他們會知道他們的PHP,因爲這不是他們關心的問題。我不知道PHP來幫助他們。 – 2011-06-02 18:05:32

+0

我知道老兄:) +1 – 2011-06-02 18:25:49

2

嘗試這樣的:

var url = "http://localhost:8888/uploads/"+<? $name ?>+"/output.txt"; 
setTimeout(function() { 
    top.location.href = url; 
}, 1000); 
0

它應該是:

window.location.href = url 
+0

如果是在框架集中,則不行。無論如何,'window.location'工作正常,你不需要直接訪問'href'屬性。 – 2011-06-02 18:02:27

1
<?php echo "var url = 'http://localhost:8888/uploads/$name/output.txt'"; ?> 

刪除的長處和括號 - 在URL只是把變量。 還使用Firebug解決您的JS代碼:http://getfirebug.com/

1

使用「回聲」或略有不可讀PHP短代碼<?=呼應出一個變量。

<script language="JavaScript"> 
    var url = "http://localhost:8888/uploads/<?php echo $name; ?>/output.txt"; 
    setTimeout(function(){ 
     top.location = url; 
    }, 1000); 
</script> 

我知道我已經創建了另一個閉包,但感覺它更具可讀性。