Я хочу показать пользовательскую деталь модальной, когда я нажимаю кнопку подробностей рядом с каждым именем пользователя, но проблема в том, что я не могу отобразить данные "user_detail", которые я получил от контроллера, из-за меня это запутывает, потому что когда я показываю от контроллера, использующего print_r(), он отлично отображает массив данных, который я хочу. Теперь я просто хочу отобразить его как html, так как я отображаю всех пользователей в первую очередь.
Вот мой полный код, я думаю, нам нужно просто сосредоточиться на get_detail()
в контроллере.
Модель /test_model.php:
function get_user()
{
$query = $this->db->query("SELECT * FROM tb_users ");
$result = $query->result_array();
return $result;
}
function get_detail($user_id)
{
$query = $this->db->query("SELECT * FROM tb_users where user_id = '".$user_id."'");
$result = $query->result_array();
return $result;
}
Контроллер /Welcome.php:
public function index()
{
$data["datakcp"] = $this->test_model->get_user();
$this->load->view('welcome_message',$data); // do this by loading a "view" that formats the data we gather here
}
public function get_user($user_id = null)
{
// get the user_id from the ajax request
// this means if $user_id is set (not null) then make $user_id = $user_id. Otherwise, make $user_id = posted input
$user_id = ($user_id) ? $retailer_id : $this->input->post('user_id');
$datadetail= $this->test_model->get_detail($user_id);
echo json_encode($datadetail);
}
Просмотров /my_view.php:
<div class="container" style="width:700px;">
<h3 align="center"> </h3>
<br>
<div class="table-responsive">
<table class="table table-bordered">
<tr>
<th width="70%">Employee Name</th>
<th width="30%">View</th>
</tr>
<?php foreach($datakcp as $user){ ?>
<tr>
<td><?php echo $user["user_name"] ?></td>
<td><input type="button" name="detail" value="detail" id="<?php echo $user["user_id"] ?>" class="btn btn-info btn-xs view_dawta"></td>
</tr>
<?php } ?>
</table>
</div>
</div>
<div id="dataModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body" id="employee_detail">
<table>
<thead>
<th>Username<th>
<th>Campaign</th>
</thead>
<tbody id="userDetail">
</tbody>
</table>
</div>
</div>
</div>
Мой сценарий jQuery ajax:
<script>
$(document).ready(function(){
$('.view_dawta').click(function(){
var user_id= $(this).attr("id");
$.ajax({
url:"index.php/Welcome/get_user",
method:"post",
data:{user_id:user_id},
success:function(data){
console.log(data)
$.each((JSON.parse(data)), function(key, value){
$('#userDetail').append(
'<tr>'+
'<td>'+value.user_name+'</td>'+
'<td>'+value.campaign_name+'</td>'+
'</tr>'
);
});
$('#dataModal').modal("show");
}
});
});
});
</script>
Функция get_user
ничего не возвращает. (Примечание: если вы попытать print_r
или var_dump
выражение, выход print_r
или var_dump
выражение возвращается, и в противном случае ничего не возвращается).
Поместить echo json_encode($datadetail);
в конце в функции get_user
и получить данные json
в ответ. Затем вам придется использовать и форматировать данные json
в вашей функции успеха ajax
.
Кроме того, вы можете вернуть форматированный html
из функции get_user
, в этом случае ваш $('#employee_detail').html(data);
должен работать так, как есть.
РЕДАКТИРОВАТЬ:
1- Вот базовый вызов ajax
вы должны использовать для получения данных json
:
$.ajax({
url:"index.php/Welcome/get_user",
method:"post",
contentType: "application/json;",
dataType: "json",
data:{user_id:user_id},
success:function(data){
$('#employee_detail').html(data);
$('#dataModal').modal("show");
}
});
2- И в вашей функции get_user
поместите echo json_encode($datadetail);
в конце. На этом этапе вы сможете увидеть данные json
в своем модальном формате.
3- В функции get_user
замените $datadetail["userdetail"]
на $datadetail
. И в конце функции, echo json_encode($datadetail);
,
4- В my_view.php
таблицу внутри <div class="modal-body" id="employee_detail">
как my_view.php
ниже (это только один способ, вы можете выбрать другой подход, если хотите):
<table>
<thead>
<th>Username</th>
<th>Campaign</th>
<!-- include more <th> tags for other user data -->
</thead>
<tbody id="userDetail">
</tbody>
</table>
5- В вызове ajax
ваша функция success
может быть:
success:function(data){
$.each(data, function(key, value){
$('#userDetail').append(
'<tr>'+
'<td>'+value.user_name+'</td>'+
'<td>'+value.campaign_name+'</td>'+
/* include more <td> tags for other user data */
'</tr>'
);
});
$('#dataModal').modal("show");
}
6- Этого должно быть достаточно, чтобы дать вам полное представление о том, как получать и обрабатывать данные json
а также форматировать его в html. Это должно помочь вам начать работу. Теперь вы можете работать с другими форматами и т.д.
В соответствующей заметке у вас есть дубликат user_id
в возвращаемых данных. Проверьте это.
Надеюсь это поможет.