2012-01-02 131 views
2

我得到這個錯誤未捕獲的SyntaxError:意外的代幣<來自chrome,但一切工作正常與FireFox。 我發現很多類似的帖子,但沒有解決方案。Chrome瀏覽器:未捕獲SyntaxError:意外令牌<

所以我想知道是否有一種方法,它已經建立後,與它自己的頭髮送第二頁瀏覽器。 這個想法出現了,當我看到Firefox放置時,我在下面的函數中迴應了HTML結束標記,而Chrome則將它放在結束標記之前。

基本上,我想在這個以發送:

header('Content-Type: text/html; charset= utf-8'); 
<html></html> 

header('Content-Type: text/javascript; charset= utf-8'); 
<script></script> 

這是我的PHP腳本,我想取消對首部代碼和HTML頁面獨立發送。

public static function jsShow($html) 
{ 
    //header('Content-Type: text/javascript; charset= utf-8'); 
    echo " 
     <script type=\"text/javascript\"> 
     var e = document.getElementById('message'); 
     e.innerHTML = $html ; 
     e.style.display = 'block'; 
     </script>"; 
} 

這是頁面的樣子在Firefox,並且這工作:

</body> 
</html> 

<script type="text/javascript"> 
var e = document.getElementById('message'); 
e.innerHTML = <ul style="list-style: none; margin: 0; padding: 0;"> 
<li style="background-color: #0000FF; margin: 0;"><img src="/asset/icon/info.gif" alt="Info: " /> working</li> 
<li style="background-color: #008000; margin: 0;"><img src="/asset/icon/success.gif" alt="Success: " /> Got it</li> 
</ul> 
; 
e.style.display = 'block'; 

</script> 

我想,我也許可以使用ob_start()& ob_end_flush()函數,但你無法控制頭只有那些內容。

回答

2

...

 e.innerHTML = " . json_encode($html) . " ; 
+0

我不認爲這會起作用,我不明白爲什麼它會這樣做,我只是在絕望中嘗試過它,而YAHOOO – RoboTamer 2012-01-02 06:46:14

+0

它利用了所有JSON值都是有效的JavaScript文字這一事實。 – 2012-01-02 06:46:45

2

錯誤「未捕獲的SyntaxError:意外的標記<」是你顯示你的第二個代碼塊什麼合適的錯誤,因爲它是無效的JavaScript和所有的瀏覽器出現故障。您正在分配e.innerHTML等於沒有引號的字符串:

e.innerHTML = <ul style="list-style: none; margin: 0; padding: 0;"> 
<li style="background-color: #0000FF; margin: 0;"><img src="/asset/icon/info.gif" alt="Info: " /> working</li> 
<li style="background-color: #008000; margin: 0;"><img src="/asset/icon/success.gif" alt="Success: " /> Got it</li> 
</ul> 
; 

請參閱「=」後的「<」吧? - 這是意想不到的令牌。

您似乎沒有在該字符串中使用任何單引號,所以最簡單的修復方法就是將其封裝在單引號中。我不知道PHP,但這樣的事情:

echo " 
    <script type=\"text/javascript\"> 
    var e = document.getElementById('message'); 
    e.innerHTML = '" . $html . "'; 
    e.style.display = 'block'; 
    </script>"; 

或任何PHP語法是爲了得到這樣的結果返回給瀏覽器:

e.innerHTML = '<ul style="list-style ... </ul>'; 

順便說一句,它不會使感覺爲相同的響應設置兩個不同的標題。你要返回的是一個html頁面,它恰好在底部有一個腳本塊。 「text/javascript」內容類型更多的是鏈接的JS文件,它不包含html(沒有腳本標籤),只是JS。

+0

引用是我的第一個想法。但是當我引用它時,會給我一個不同的錯誤,並且它也停止在Firefox中工作。看到它認爲我不應該引用,因爲它都從一個PHP變量轉移到js var。無論如何,這是當我引用時得到的內容: – RoboTamer 2012-01-02 06:41:28

+0

RoboTamer 2012-01-02 06:41:34

+0

您必須引用它,或者至少確保引號最終在瀏覽器看到的內容中(即,您通過View Source看到的內容)。您不能直接從PHP變量傳輸到JS變量,PHP將在服務器上運行並輸出文本,然後將文本作爲瀏覽器接收的頁面源的一部分。從您接受的解決方案中查看查看源代碼... – nnnnnn 2012-01-02 08:55:49

相關問題