I'm trying to create an object in javascript with PHP. This is my script:
<script>
$(document).ready(function(){
var genres = [
<?php
$last = count($userGenres) - 1;
$i = 0;
foreach($userGenres as $a){
$i++;
echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
if($i < $last){
echo ',';
}
}
?>
];
});
</script>
When I check the generated source, it creates a valid object, but the whole script in that tag doesn't work now. How would fix this, without JSON?
Thanks
I'm trying to create an object in javascript with PHP. This is my script:
<script>
$(document).ready(function(){
var genres = [
<?php
$last = count($userGenres) - 1;
$i = 0;
foreach($userGenres as $a){
$i++;
echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
if($i < $last){
echo ',';
}
}
?>
];
});
</script>
When I check the generated source, it creates a valid object, but the whole script in that tag doesn't work now. How would fix this, without JSON?
Thanks
Share Improve this question edited Nov 29, 2011 at 11:58 Gregor Menih asked Nov 29, 2011 at 11:52 Gregor MenihGregor Menih 5,12614 gold badges47 silver badges67 bronze badges 10-
4
You didn't close the
$(document).ready()
function. – Shadow Wizard Commented Nov 29, 2011 at 11:53 - What exactly doesn't work? What is the problem? – Sjoerd Commented Nov 29, 2011 at 11:53
- Where is this code hosted? In a PHP file I guess? – Boris Delormas Commented Nov 29, 2011 at 11:54
-
4
Are you aware of the
json_encode()
function in PHP? – Martin Bean Commented Nov 29, 2011 at 11:54 -
4
You should really use
json_encode
. Otherwise your code is quite brittle as-is. – Matt Ball Commented Nov 29, 2011 at 11:57
4 Answers
Reset to default 3You forgot to close the .ready()
method and the anonymous function inside of it.
Try this:
<script>
$(document).ready(function(){
var genres = [
<?php
$last = count($userGenres) - 1;
$i = 0;
foreach($userGenres as $a)
{
$i++;
echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
if($i < $last)
{
echo ',';
}
}
?>
];
});
</script>
As the ment says you should consider using (php function)json_encode instead, which will turn...
php:
$a = array(
array("gender"=> "male", "name"=> "Bob"),
array("gender"=> "female", "name"=> "Annie")
);
Into json:
[
{gender:"male", name:"Bob"},
{gender:"female", name:"Annie"}
]
Echoing json_encode($a) would output it just like that.
Your function is not closed properly:
}
}
?>
];
}); // <--- add this
</script>
This:
<script>
$(document).ready(function(){
var genres = [
<?php
$last = count($userGenres) - 1;
$i = 0;
foreach($userGenres as $a)
{
echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
if($i < $last)
{
echo ',';
}
$i++;
}
?>
];
});
</script>
Changes: You have to close the anonymous function and the ready() method. Also, move the i++ to the end so that you cover all cases (you will be missing one). The error you get is because you have the i++ wrong.