2016-10-24 4 views
0

У меня есть результат запроса в контроллере, который я закодировал до json. Мне нужно передать его в javascript, потому что я хочу использовать typeahead js для ввода автозаполнения. Это моя попытка:Как получить результат JSON от контроллера на JavaScript

Мой контроллер (admin.php):

public function promotion() 
{ 
    $this->db->distinct(); 
    $this->db->select("from_email"); 
    $this->db->from('booking'); 
    $query2 = $this->db->get(); 
    $results = $query2->result_array(); 
    $data['from_email'] = json_encode($results); 

    $this->template->render('admin/promotion',$data,'admin'); 
} 

Мой вход поиск (на поиск на основе адреса электронной почты из базы данных):

<input type="text" name="email" class="form-control input-lg typeahead typeahead-from-email" id="email" required="required" autocomplete="off" tabindex="1" /> 

Javascript:

var emails = new Bloodhound({ 
    datumTokenizer: function (d) { 
     return Bloodhound.tokenizers.whitespace('from_email'); 
    }, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    prefetch: base_url + 'admin/promotion' 
}); 
$('.typeahead-from-email').typeahead({ 
     hint: true, 
     highlight: true, 
     minLength: 3 
    }, 
    { 
     name: 'from_email', 
     displayKey: 'from_email', 
     source: from_email 
    }); 

Это не работает.

+0

Что ожидается результат '$ данных [ 'FROM_EMAIL'] = json_encode ($ результатов) ; '? – guest271314

+1

Я надеюсь, что это не настоящие адреса электронной почты ... –

+0

Проблема может быть в том, что вы возвращаете страницу рендеринга, а не только сам JSON. Что генерирует шаблон «admin/promotion»? –

ответ

0

Нет необходимости вызывать представление или шаблон

public function promotion() 
{ 
    $this->db->distinct(); 
    $this->db->select("from_email"); 
    $this->db->from('booking'); 
    $query2 = $this->db->get(); 
    $results = $query2->result_array(); 
    echo json_encode($results); //<-- Just echo the json result 
} 

Затем в JavaScript

prefetch: <?php echo base_url('admin/promotion'); ?> 
+0

вы правы, Мне просто нужна одна новая функция для кодирования результата запроса. Спасибо :) – may

1

попробуйте это сначала, чтобы проверить, действительно ли ваш typeahead работает, затем попробуйте найти «Ala» или «Cal». Я буду обновлять свой ответ на основе вашего ответа.

var emails = new Bloodhound({ 
    datumTokenizer: Bloodhound.tokenizers.whitespace, 
    queryTokenizer: Bloodhound.tokenizers.whitespace, 
    local: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California'] 
}); 

$('.typeahead-from-email').typeahead({ 
    hint: true, 
    highlight: true, 
    minLength: 3 
}, 
{ 
    name: 'from_email', 
    source: emails 
}); 
+0

он тоже не работает :(он не дает мне никакой ошибки – may

+0

Вы используете инструменты chrome dev? Если да, то следите за своей вкладкой в ​​сети при вводе текста на свой ввод typeahead и посмотрите, действительно ли он запрашивает ваш сервер. –

+0

Да, им используется хром, но он ничего не показывает при вводе поиска – may