Przesyłanie zmiennej z pliku php do pliku JavaScript

0

Witam,
to mój pierwszy post na forum ;)
Mam następujący problem:

Załóżmy, że w pliku php projektu mam zmienną: '''$zmienna="Bum sialala";'''

Chcę ją przesłać do osobnego pliku JavaScript (o nazwie plik.js) projektu. Jak to mogę zrobić?
Pozdrawiam!

0

W PHP echo a w js httprequest.

0

Mógłbyś nieco rozwinąć swoją wypowiedź?

1

Mozesz ja zapisac w html jako value w input, a potem przechwycic skryptem jquery do JS.
np.

<input type="hidden" name="field" id="field" value="<?php echo $twojazmienna; ?>">

nastepnie w JS i Jquery

var twojazmienna = $("#field").val();

i zmienna z php jest juz w JS

1

Jeżeli nie używasz żadnych cudów w postaci require.js itp, to w zasadzie masz dwa wyjścia:

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1