for (var i = 0; i < data.length; data++) {
Очевидно, должно быть i++
.
Но в общем случае не следует создавать динамическое содержимое страницы с использованием HTML-слинга.Ваш код не будет работать, если имена категорий содержат символы, которые являются специальными в разметке HTML.Если категории могут быть введены пользователем, это дает вам дыры в безопасности межсайтовых сценариев.Вместо этого вы можете использовать ярлык создания jQuery 1.4 $('<option>', {text: foo, value: bar})
или, что еще проще, new Option()
.В любом случае свойства устанавливаются напрямую, а не встраиваются в строку, поэтому вам не нужно беспокоиться о проблемах с выходом из HTML.
Также, когда вы выплевываете строки (или другие данные) из PHP в источник JavaScript, вам следуетиспользуйте json_encode()
для их правильного преобразования, в противном случае у вас будут проблемы с символами, которые являются специальными в строковых литералах JavaScript ('
, "
, \
и различных управляющих кодах) или в прилагаемом файле HTML (</script>
).Опять же, может быть, это не будет иметь значения для конкретных значений, которые у вас здесь есть, но в целом этот материал является источником многих проблем, связанных с защитой.
var siteurl= <?php echo json_encode(site_url(), JSON_HEX_TAG); ?>;
$('#select_category').change(function(){
$.getJSON(siteurl+'ajax/categories/pages/'+$(this).val(), function(data) {
$('#select_subcategory').empty();
$.each(data, function() {
$('#select_subcategory').append(new Option(this.cat_name, this.cat_id));
});
});
});