1

How can I create a dynamic Javascript variable using a PHP String?

This approach doesn't work. How should I fix it to make it work?

<?php 
    $dynamicHTMLElementId = rand();
?>

<script type="text/javascript">
    var dynamicHTMLElementId = window[<?php echo json_encode($dynamicHTMLElementId); ?>];
</script>

Thank you all in advance.

Program-Me-Rev
  • 6,184
  • 18
  • 58
  • 142

2 Answers2

1

Your attempt is almost correct. Of course, for example window[1029376] is not a valid object property of window.
As long as your PHP output is JavaScript syntax it will work.

If your code has the purpose to select a random element (as unrealistic as that is), use document.getElementById() for IDs or the other getElementBy... functions.

<?php 
    $dynamicHTMLElementId = rand();
?>

<script type="text/javascript">
    var dynamicHTMLElement = document.getElementById('<?php echo json_encode($dynamicHTMLElementId); ?>');
</script>

This may result in (with the ID being random):

<script type="text/javascript">
    var dynamicHTMLElement = document.getElementById('1335407484');
</script>

Simply look at the source code of the output and check the browser console for errors.
Be aware that json_encode will not output quotes for a number.

Peter Krebs
  • 3,831
  • 2
  • 15
  • 29
1

Simple PHP function to initilize a PHP associate array as a JSON object in javascript.

function echoVariableInJavascript($variablename,$variable)
{
   echo("<script type=\"text/javascript\">");
   echo("var ".$variablename."= JSON.parse(atob(\"".base64_encode(json_encode($variable))."\"));");
   echo("</script>");
}

/*Usage*/
$object = ["ok"=>true,"status"=>"Good"];
echoVariableInJavascript("object", $object);
Mnyikka
  • 1,223
  • 17
  • 12