#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 /
Если вы этого не сделаете, вы можете сделать это в любом случае, с помощью еще нескольких строк кода.