#javascript #php #ajax #json #codeigniter
#javascript #php #ajax #json #codeigniter
Вопрос:
По сути, у меня есть форма в представлении с включенным одним входом и отключенным несколькими входами (только для отображения информации, полученной из уникального ввода).
Теперь мне нужно отправить этот ввод в контроллер, чтобы сделать запрос, и отправить обратно в представление массив с информацией о полях, но без обновления сайта (потому что я не могу потерять прогресс, который у меня есть на этой странице).
Может быть, решение состоит в том, чтобы использовать javascript для отправки контроллеру поля ввода, а в функции возвращать массив значений для обновления формы, но как?
РЕДАКТИРОВАТЬ: Извините за мой плохой английский.
Комментарии:
1. подсказка: он помечен на ваш вопрос
2. Конечно, но мои знания javascript, ajax или json минимальны, я знаю, что это возможно, но я не знаю, как это сделать.
3. Есть ли у вас какой-либо код javascript на данный момент?
4. вы искали какие-либо учебные пособия (
codeigniter ajax php
). вот один5. ajax и сериализация облегчат вашу жизнь
Ответ №1:
var input = $('#input').val();
$.ajax({
type:"POST",
url: <?php echo base_url().'controllername/action'?>
data: {input : input},
success: function(data){
// this data should be contain an arra
$('#where_to_insert_array').html();
}
});
-
В действии контроллера и в действии
функция action() { $data = $this->input->post(‘ввод’);
-
получить данные из базы данных в $data
-
создайте его массив, а затем повторите его
echo array(); }
Ответ №2:
Наконец, я понимаю, как динамически передавать массив из контроллера в представление, это код:
Просмотр javascript:
function getClient(){
if($('#cedula_cliente').val()){
$.ajax({
type : "post",
url: "<?php echo base_url().'index.php/clientes/getClienteFactura'?>",
cache: false,
data : {cedula : $('#cedula_cliente').val()},
success : function(json){
var obj=jQuery.parseJSON(json);
if(obj[0]){
$('#nombre_cliente').val(obj[0].nombre);
$('#apellido1_cliente').val(obj[0].apellido1);
$('#apellido2_cliente').val(obj[0].apellido2);
$('#dir_cliente').val(obj[0].dir);
}else{
alert("Usuario no encontrado");
}
},
});
}else{
alert("Debe ingresar una cédula de usuario");
}
}
Я использую obj [0], потому что «cedula» является первичным ключом, и он никогда не вернет более 1 строки.
И это функция контроллера:
public function getClienteFactura(){
$cedula = $this->input->post('cedula');
$query = $this->Client_model->getClientByCedula($cedula);
echo json_encode($query);
}
Спасибо за ответы, возможно, мне следовало лучше поискать в Google, ключом к решению проблемы был Json.