myPlugin.start($val); // Tried this, didn't work
It doesn't work because $val
is undefined as far as JavaScript is concerned, i.e. the PHP code did not output anything for $val
. Try viewing the source in your browser and here is what you'll see:
myPlugin.start(); // I tried this, and it didn't work
And
<?php myPlugin.start($val); ?> // This didn't work either
This doesn't work because PHP will try to treat myPlugin
as a constant and when that fails it will try to treat it as the string 'myPlugin'
which it will try to concatenate with the output of the PHP function start()
and since that is undefined it will produce a fatal error.
And
myPlugin.start(<?=$val?> // This works sometimes, but sometimes it fails
While this is most likely to work, since the PHP code is producing valid JavaScript with the expected arguments, if it fails, chances are it's because myPlugin
isn't ready yet. Check your order of execution.
Also you should note that the PHP code output is insecure and should be filtered with json_encode()
.
EDIT
Because I didn't notice the missing parenthesis in myPlugin.start(<?=$val?>
:-\
As @Second Rikudo points out, for it to work correctly $val
would need to contain the closing parenthesis, for example: $val="42);"
Meaning that the PHP will now produce myPlugin.start(42);
and will work as expected when executed by the JavaScript code.