Я должен циклично выполниться через возвращенный массив в JavaScript, но он не работает, он циклично выполнится через каждую букву массива слова вместо цикличного выполнения через значение.
это - код JavaScript
$.ajax({
url: "<?php echo site_url('home/getsubcats'); ?>",
type: 'POST',
data: form_data,
success: function(msg)
{
for ( var i in msg )
{
alert( msg[i] );
}
//$('#main_content').html(msg);
}
});
и это - контроллер (это get's корректные данные, таким образом, запрос не является проблемой);
function getsubcats()
{
$this->load->model('site_model');
if ($this->input->post('ajax')):
$catid = $this->input->post('id');
return $this->site_model->getSubCats($catid);
endif;
}
Возможно, вам придется добавить returnType: 'json'
в объект опции $.ajax, если ваш код возвращает JSON.
Если ваш код перебирает отдельные символы, это означает, что msg
является строкой, а не массивом.
Кроме того, использование for(var i = 0; i < msg.length; i++)
в качестве for in
циклов также будет включать наследуемые атрибуты - поэтому при использовании javascript-фреймворков, расширяющих Object.prototype или Array.prototype, вы можете столкнуться с проблемами.
Скорее всего, вы выполняете итерацию по строковому ответу, а не по массиву. Я не думаю, что jQuery делает это преобразование автоматически.
Я не знаком с CodeIgniter, но когда вы возвращаете getSubCats(), результат автоматически кодируется в JSON? Потому что если нет, вы должны закодировать его перед отправкой клиенту.
Используйте панель net в Firebug или вкладку Resources в Chrome для проверки фактического ответа.