Jeżeli nie używasz żadnych cudów w postaci require.js itp, to w zasadzie masz dwa wyjścia:
- Załadować tą zmienną za pomocą ajaxa i uniknąć zmiennej globalnej:
// plik scripts.js
var someModule = {
init: function (requiredData) {
console.log(requiredData.zmienna);
}
}
$.get('foo.php').then(function (data) {
// tyle razy tego uzywalem a nigdy nie pamietam, czy data to już obiekt, czy JSON...
someModule.init(data);
});
// foo.php
// ten plik powinien zwracac wszystkie potrzebne zmienne, zeby nie odpytywac pińcet razy servera o każdą pierdołę
echo json_encode(['zmienna' => 'Bum sialala']);
exit;
- Użyć zmiennej globalnej i problem z głowy (to wyjście wydaje mi się łatwiejsze; unikamy dodatkowych żądań kosztem zmiennej globalnej - coś za coś):
<! -- index.php -->
<head>
<! -- ... jakieś pierdoły ... meta tagi i inne -->
<script>
// nazwa dowolna, te __ są po to ze zmniejszaja szanse ze sobie to nadpiszesz :P bo zmienna __pageDTO__ jest GLOBALNA
// zamysł jest taki, że __pageDTO__ trzyma wszystko, co na danej strone twoje skrypty mogą potrzebować.
// mozesz jeszcze połączyć to rozwiązanie z ukrytym inputem, ale nie wiem czy jest sens...
window.__pageDTO__ = {
zmienna: '<?= 'Bumsialalalala' ?>'
};
</script>
<! -- ważne, zeby ten skrypt (script.js) byl ladowany po ustawieniu zmiennej globalnej, domyslnie na dole strony, przed domknięciem taga </body> -->
<script src="script.js"></script>
// plik scripts.js
var someModule = {
init: function (requiredData) {
console.log(requiredData.zmienna);
}
}
someModule.init(__pageDTO__);
Rozwiązanie, które zaproponował kolega wyżej też jest dobre, bo nie ma zmiennej globalnej, ani dodatkowych żądań, ale mi się osobiście nie podoba i wolę swoje nr 2 (choćby dlatego, że nie chce mieszać w to wszystko jeszcze html'a).
Jeżeli byś chciał użyć requirejs, to tutaj jest moja odp. na so jak to zrobić https://stackoverflow.com/a/45975989/5515745