2010-07-27 17 views
18

Próbowałem (ale jej nie działa):Jak umieścić php w JavaScript?

<?php 
    $htmlString= 'testing'; 
?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     var htmlString=<?php echo $htmlString; ?>; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

Oto tutorial że Użyłem do tego celu:

Odpowiedz

41

Spróbuj tego:

<?php $htmlString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript"> 
     // notice the quotes around the ?php tag   
     var htmlString="<?php echo $htmlString; ?>"; 
     alert(htmlString); 
    </script> 
    </body> 
</html> 

Kiedy napotkasz problemy jak ten, dobrym pomysłem jest, aby sprawdzić swoją przeglądarkę za błędy JavaScript. Różne przeglądarki mają różne sposoby pokazywania tego, ale szukaj konsoli javascript lub czegoś podobnego. Sprawdź również źródło strony wyświetlane przez przeglądarkę.

Czasami początkujący są zdezorientowani cytatami w ciągu znaków: W części PHP przypisano 'testing' do $htmlString. To umieszcza wartość ciągu wewnątrz tej zmiennej, ale wartość nie zawiera cytatów: Są one przeznaczone tylko dla interpretera, więc on wie: oh, teraz przychodzi ciąg literalny.

+1

@ inf3rno, czy to źle, powinniśmy to naprawić, nie możemy pozwolić na złą odpowiedź tutaj ... co dokładnie jest nie tak? (Zakładam, że sprzeciwiasz się ostatnio paragrafowi ... hm ... trochę trudno wytłumaczyć to początkującemu - czy masz lepsze podejście?) –

+0

@ inf3rno, oh ... Właśnie widziałem twoją własną odpowiedź Hm ... masz rację tam ... z wyjątkiem, myślę, że dla poziomu OP jest ATM, to jest trochę Wygląda na to, że nie ma już głowy owiniętej wokół podstawowych rzeczy ... –

+3

Łatwo wytłumaczyć, jeśli chcesz wstrzyknąć ciąg do kodu javascript, musisz uciec od niego dla javascript ... json_encode robi to ... jest bardzo podobny do zapobiegania wstrzyknięciu sql, przez to masz t o escape dla sql ... – inf3rno

23

tracisz cytaty wokół napisu:

... 
var htmlString="<?php echo $htmlString; ?>"; 
... 
+1

'$ htmlString = "\"" 'huh, zastanawiam się, dlaczego ta JavaScript nagle przestał działać ... – zzzzBov

5

trzeba cudzysłowy wokół napisu w javascript

var htmlString="<?php echo $htmlString; ?>"; 
+1

Pobity przez minutę:] – Anraiki

10

Wszystkie powyższe wyjaśnienia nie działają, jeśli pracujesz z plikami .js. Jeśli chcesz przeanalizować PHP w plikach .js, trzeba dokonać zmian na serwerze przez modfiying .htaccess w którym .js przebywania stosując następujące polecenia:

<FilesMatch "\.(js)$"> 
    AddHandler application/x-httpd-php .js 
</FilesMatch> 

Następnie test.js plików pliki zawierające następujący kod wykona js po stronie klienta z przeanalizowanej PHP po stronie serwera:

<html> 
<head> 
<script> 
function myFunction(){ 
    alert("Hello World!"); 
} 
</script> 
</head> 
<body> 
<button onclick="myFunction()"><?php echo "My button";?></button> 
</body> 
</html> 
7

jedyny właściwy sposób umieścić dane po stronie serwera do wygenerowanego kodu javascript:

<?php $jsString= 'testing'; ?> 
<html> 
    <body> 
    <script type="text/javascript">  
     var jsStringFromPhp=<?php echo json_encode($jsString); ?>; 
     alert(jsStringFromPhp); 
    </script> 
    </body> 
</html> 

Z prostymi cytatami zawartość twojej zmiennej nie jest chroniona przed kodami HTML i javascript, więc jest podatna na ataki XSS ...

Z podobnych powodów zalecam używanie document.createTextNode() zamiast ustawiania innerHTML. Ofc. jest wolniejszy, ale bardziej bezpieczne ...

+2

Technicznie nie jest to jedyny * sposób, ale z pewnością jest to bezpieczny sposób.Powiedział, że nie należy budować JavaScript z PHP na początek. – zzzzBov

+0

To zależy od rodzaju danych, które chcesz wysłać. Znaki Unicode html nie są takie same jak znaki unicode javascript, więc trzeba je transformować ... Innym sposobem użycia usług REST i odpowiedniej biblioteki po stronie klienta do obsługi żądań, na przykład extjs lub szkielet. Btw. musisz też użyć json_encode w tym przypadku ... – inf3rno