2012-01-02 3 views
2

Je reçois cette erreur Uncaught SyntaxError: Jeton inattendu < de chrome mais tout fonctionne correctement avec FireFox. J'ai trouvé beaucoup de messages similaires mais pas de solution. Donc, je me demande s'il y a un moyen d'envoyer une deuxième page au navigateur après qu'il a été construit, avec son propre en-tête. L'idée est venue, quand j'ai vu que Firefox place, ce que je fais écho dans la fonction ci-dessous, après la balise de fermeture html , par rapport à Chrome avant la balise de fermeture.Avec Chrome: Uncaught SyntaxError: Jeton inattendu <

Fondamentalement, je tiens à envoyer dans cet ordre:

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

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

Ceci est mon script php, je voudrais décommenter le code d'en-tête et l'envoyer indépendamment de la page 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>"; 
} 

C'est ce que la page ressemble dans Firefox, et cela fonctionne:

</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> 

Je pensais que je pourrais peut-être utiliser ob_start() & ob_end_flush(), mais vous ne pouvez pas contrôler les en-têtes avec seulement ce contenu.

Répondre

2

...

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

Je ne pensais pas que cela fonctionnerait, et je ne comprends pas pourquoi, je l'ai juste essayé par désespoir, et YAHOOO – RoboTamer

+0

Il profite du fait que toutes les valeurs JSON sont des littéraux JavaScript valides. –

2

L'erreur « Uncaught SyntaxError: inattendue jeton < » est une erreur appropriée pour ce que vous montrez dans votre deuxième bloc de code, car il est invalide et JavaScript doit échouer dans tous les navigateurs . Vous assignez e.innerHTML égal à une chaîne non cotée:

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> 
; 

Voir la « < » juste après le « = »? - C'est le jeton inattendu.

Vous ne semblez pas utiliser de guillemets simples dans cette chaîne, la solution la plus simple consiste simplement à l'insérer dans des guillemets simples. Je ne sais pas PHP, mais quelque chose comme ceci:

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

Ou quelle que soit la syntaxe PHP est d'obtenir ce résultat renvoyé au navigateur:

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

Par ailleurs, il ne fait pas sens de définir deux en-têtes différents pour la même réponse. Ce que vous renvoyez est une page qui est html, qui se trouve avoir un bloc de script en bas. Le type de contenu "text/javascript" est plus pour les fichiers JS liés, qui ne contiennent pas html (pas de balises de script), juste JS.

+0

Citation a été ma première pensée aussi. Mais quand je cite cela me donne une erreur différente et ça arrête de fonctionner aussi dans Firefox. Voyez-vous je ne devrais pas avoir à citer parce que tout est transféré d'une variable php à la var js. De toute façon voici ce que je reçois quand je cite: – RoboTamer

+0

RoboTamer

+0

Vous devez le citer, ou au moins vous assurer que les citations se retrouvent dans ce que le navigateur voit (c'est-à-dire ce que vous voyez via View Source). Vous ne pouvez pas transférer directement d'une variable PHP à une variable JS, le PHP s'exécute sur le serveur et sort du texte qui fait alors partie de la source de la page que le navigateur reçoit. Jetez un coup d'œil à la source View de votre solution acceptée ... – nnnnnn

Questions connexes