I am using an HHTML form with a dropdown which is populated from a JS script through id.
<div class="ui-widget"> <input id="ctags" class="form-control col-md-8" autocomplete="off" placeholder="Start typing Collection Town" name="colltown_name" required> <input id="ctag" type="hidden" name="colltown"> </div>
The JS script to create the id “ctags” is as follows using a .txt file
<script> //AUTOCOMPLETE FOR TOWNS - MOBILE FRIENDLY (function() { var towns = [<?php echo file_get_contents("file.txt")?>]; $("#ctags").autocomplete({ source: towns, select: function( event, ui ) { $("#ctags").val(ui.item.label); $("#ctag").val(ui.item.value); return false; } }); </script>
This dropdown populates and works as should, but I want to rather use a PHP SELECT statement to retrieve the information every time and generate a fresh list for the towns, as the information does change periodically. I have created the PHP SELECT section and it generates a PHP variable which is a string, that is identical to the txt file. I have checked this through console.log. So the PHP code to take the array returned from the SELECT statement is as follows. I have added str_replace to make sure that the string is identical to the txt file and $towns_dropdown is the array returned from the SELECT statement.
<?php $netJSON = json_encode($towns_dropdown); $net = str_replace("[","",$netJSON); $net1 = str_replace("]","",$net); ?>
I then change my JS to create the id “ctags” as follows using a PHP variable instead of the txt file.
<script> //AUTOCOMPLETE FOR TOWNS - MOBILE FRIENDLY (function() { var towns='<?php echo $net1; ?>'; $("#ctags").autocomplete({ source: towns, select: function( event, ui ) { $("#ctags").val(ui.item.label); $("#ctag").val(ui.item.value); return false; } }); </script>
If I read results in console.log it displays the string, but the dropdown doesn’t populate. If I get the PHP create to create a new file from the PHP variable and then call that file (file.txt) in the JS script as follows:-
<?php $netJSON = json_encode($towns_dropdown); $net = str_replace("[","",$netJSON); $net1 = str_replace("]","",$net); $file = 'file.txt'; $data = $net1; file_put_contents($file, $data); ?>
it populates the dropdown correctly
So JS calls the new file file.txt and it works, as in populating the dropdown.
So, in conclusion, I don’t seem to be able to get a PHP variable(which is a string) to get the dropdown to populate…….
Advertisement
Answer
I managed to get it working using the PHP variable as follows:-
<?php $towns_list = json_encode($towns_dropdown); ?>
and the JS script line:-
var towns=<?php echo $towns_list; ?>;
@CBroe, you were correct, I was getting confused in the JSON shennanigans, once I saw through that it was pretty straight forward.