Вызов функции javascript из контроллера codeigniter

#php #javascript #codeigniter #view #controller

#php #javascript #codeigniter #Вид #контроллер

Вопрос:

Я разрабатываю сайт с использованием codeigniter.У меня есть форма, которая содержит кнопку добавления и текстовое поле. как только пользователь вводит данные, я должен проверить, существуют ли они в базе данных, если да, сгенерируйте динамическое текстовое поле на странице, чтобы предупредить пользователя. Я написал javascript для генерации динамического текстового поля. Мой вопрос в том, как проверить в базе данных??? как вызвать контроллер из javascript или вызвать функцию javascript из контроллера???

Ответ №1:

На самом деле это намного проще, чем вы ожидаете.. и вы начнете использовать это во всех своих разработках, как только увидите, насколько это здорово!

Итак, для начала — мы собираемся использовать встроенную функцию POST от jQuery.

Создайте функцию внутри вашего контроллера, к которой вы хотите получить доступ, мое предложение — добавить к имени функции префикс «ajax_»

Итак, вот пример функции контроллера:

 function ajax_lookUpUsername(){
    $username = $this->input->post('username');
    $this->db->where('username', $username);
    $query = $this->db->get('accounts');
    if ($query->num_rows() > 0){
       echo 0;
    } else {
       echo 1;
    }
}
  

и вот ваша простая функция onclick javascript:

 function lookUpUsername(name){
    $.post( 
        'http://yourwebsite/controller/ajax_lookUpUsername',
         { username: name },
         function(response) {  
            if (response == 1) {
               alert('username available');
            } else {
               alert('username taken');
            }
         }  
    );
}
  

второй параметр { username: name } — это то, куда будут отправляться ваши значения post, термин «username» здесь является ключевым, name — это переданное значение. Итак, это пара post ключ-значение, которая обычно отправляется с сообщением post.

Переменная response , передаваемая в функцию обратного вызова, представляет собой эхо, возвращаемое вашим контроллером. Общение стало чрезвычайно простым.

Простота поразительна, хотя я имел дело только с php, возвращающим 0 или 1, вы можете возвращать очень продвинутые объекты json, с помощью которых вы можете управлять всей интерфейсной программой.

Для более сложных ответов вы можете выполнить эхо из вашего массива контроллеров таким образом:

 echo json_encode($array_of_data); 
  

и это вернет вам идеальный набор данных json, который вы можете использовать с любым объектно-ориентированным подходом. Я использую это постоянно, вы скоро тоже, я уверен 🙂

Удачи, парень! Не стесняйтесь обращаться с любыми вопросами о расширении ответов за пределы простых эхо-сигналов 0 или 1

Комментарии:

1. Большое вам спасибо…. Я разрабатываю автозаполнение для поля ввода в форме…. Модель передаст массив данных … Как отобразить это в представлении???

2. во-первых, вы хотите получить ответ на json_encode ($array_stuff) от вашего контроллера, поэтому оберните эту функцию вокруг массива, который вы повторяете. Теперь вы можете читать из набора данных в javascript, как из любого объекта json. ответ [‘key’] = значение. в зависимости от структуры вашего возвращаемого массива вам, возможно, придется выполнять итерации по нему или просто ссылаться на ключи. Отметьте как ответ, если вы удовлетворены 🙂

3. Без проблем — если возникнут проблемы с преобразованием вашего ответа в json — попробуйте включить eval (response) в функцию обратного вызова — иногда это необходимо сделать. Кроме этого, поиск в Google «parse json» для любых проблем, с которыми вы можете столкнуться при сборе результатов — но это в значительной степени обрабатывает его как массив -> response[‘key’] = value

Ответ №2:

Вы можете сделать это, выполнив ajax-вызов php-страницы на сервере, который проверяет, существуют ли данные в db. Если вы используете jquery, вы можете сделать это более простым способом, здесь вы можете найти очень хорошие примеры:http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery /

Если вы этого не сделаете, вы можете сделать это в любом случае, с помощью еще нескольких строк кода.