2012-01-02 5 views
2

이 오류가 발생했습니다 잡히지 않은 구문 오류 : 예기치 않은 토큰 < 크롬에서 발생하지만 FireFox에서는 문제가 없습니다. 많은 비슷한 게시물을 발견했지만 해결책은 없습니다.Chrome과 함께 : Uncaught SyntaxError : 예기치 않은 토큰 <

그래서 내가 만든 후에 브라우저에 두 번째 페이지를 보내는 방법이 있는지 궁금합니다. 자체 헤더가 있습니다. 그 아이디어가 나왔는데, 파이어 폭스가 놓여있는 것을 보았을 때, html 닫기 태그 이후에, 아래 함수에서 echo하는 내용이 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>"; 
} 

페이지가 파이어 폭스의 모습입니다,이 작품 :

</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_end_flush()를위한 ob_start 사용할 수 있지만 헤더를 제어 할 수 있다고 생각 그 유일한 내용.

답변

2

...

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

나는 이것이 효과가있을 것이라고 생각하지 않았다. 왜 그런지 모르겠다. 나는 방금 절망적으로 시도했다. YAHOOO – RoboTamer

+0

모든 JSON 값이 유효한 JavaScript 리터럴이라는 사실을 이용한다. –

2

오류 "catch되지 않은 구문 에러는 : < 토큰 예기치 않은 '는 자바 스크립트를 무효이며, 모든 브라우저에서 실패하기 때문에, 당신은 당신의 두 번째 코드 블록에 표시하는 것에 대해 해당 오류입니다 .

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.innerHTML를 할당하는? - 예기치 않은 토큰입니다.

문자열 내에서 작은 따옴표를 사용하는 것처럼 보이지 않으므로 가장 간단한 해결 방법은 작은 따옴표로 묶는 것입니다. 내가 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"콘텐츠 유형은 html (스크립트 태그 없음), JS 만 포함하는 링크 된 JS 파일의 경우 더 많습니다.

+0

따옴표는 나의 첫번째 생각이었다. 하지만 인용문을 작성하면 다른 오류가 발생하며 Firefox에서도 작동하지 않습니다. PHP 변수에서 js var로 모두 전송되기 때문에 인용 할 필요가 없다고 생각하십시오. 어쨌든 여기에 내가 인용 할 때 얻는 것이 있습니다 : – RoboTamer

+0

RoboTamer

+0

브라우저에서 인용 부호를 사용하거나 브라우저에서 보는 내용 (예 : 소스보기)을 따옴표로 묶어야합니다. PHP 변수에서 JS 변수로 직접 전송할 수 없으며 PHP는 서버에서 실행되고 브라우저가받는 페이지 소스의 일부인 텍스트를 출력합니다. 수용된 솔루션에서 View Source를보십시오 ... – nnnnnn

관련 문제