#php #jquery #ajax #codeigniter
Вопрос:
Проще говоря, я хочу, чтобы status1 перешел в контроллер ajaxleadsreport
Немного более сложное объяснение:
У меня есть 2 класса представления, называемых indexreport и ajaxleadsreport. ajaxleadsreport извлекает все данные и отображает их. Теперь у меня есть переменная GET, которая передается в indexreport, и я хочу, чтобы она могла передать ее в ajaxleadsreport для фильтрации текущих данных в соответствии с переданной переменной GET.
Класс Контроллера:
public function listsreport($slug='')
{
$status1 = $this->input->get('status');
print_r($status1);
$main['content']=$this->load->view('crm/leads/indexreport',$content,true);
}
public function ajaxleadsreport($p='')
{
$output = array( 'html'=>$this->load->view('crm/leads/ajaxleadsreport',$content, true));
echo json_encode($output);
}
класс представления indexreport:
<?php
$i=$return=$uriseg;
$post=$this->input->post(); $sess=$this->session->userdata();
$post = $post?$post:$sess;
?>
<div>
...
</div>
$(document).ready(function (){
getleads();
});
function getleads(p){
$.ajax({
type: "post",dataType:"json",async:false,cache:true,
url: "<?php echo site_url('leads/ajaxleadsreport'); ?>" ( parseInt(p)>0?'/' p:''),
data: $('#objlistform').serialize(),
success: function(e){$('#leadswrap').hide().html(e.html).fadeIn('slow');}
}); return false;
}
класс представления ajaxleadsreport:
<?php
$sess=$this->session->userdata();
$status1 = $this->input->get('status');
// This is where I'm trying to put my GET value of status for filtering but it gives NULL.
$post = array('fstatus'=> $status,'fpriority'=> $sessn['fpriority']);
$postd = json_encode(array_filter($post));
?>
...
<script>
$(document).ready(function() {
function sendreq(){
setpostdatas();cleartable();getleads();
}
var slug = '<?php echo $slug?>';
var postd = '<?php echo $postd; ?>';
$('#item-list').DataTable({
"processing": true,
"stateSave": true,
"serverSide": true,
"ordering": false,
"ajax": {
url: "<?php echo site_url(); ?>leads/loadLeads",
data: {slug: slug, postdata: postd},
type : 'POST',
"dataSrc": function ( d ) {
d.myKey = "myValue";
if(d.recordsTotal == 0 || d.data == null){
$("#item-list_info").text("No records found");
}
return d.data;
}
},
'columns': [
{"data": "id", "id": "id"},
{"data": "lead_status", "lead_status": "lead_status"},
{"data": "priority", "priority": "priority"},
]
});
Как вы можете видеть в приведенном выше коде, я пытался $status1 = $this->input->get('status');
использовать класс представления ajaxleadsreport, но результат для этого равен НУЛЮ, так как значение GET передается в моем классе представления indexreport. Когда я выполняю print_r($status1)
в контроллере indexreport, он выдает правильный вывод, но в контроллере ajaxleadsreport значение равно НУЛЮ.
Так что в принципе теперь мне нужен способ передать это значение GET контроллеру ajaxleadsreport.
Комментарии:
1. Не вызывайте один контроллер от другого. Если вам нужно запустить какой-то общий код в обоих, переместите этот код в службу (или, возможно, в защищенный метод контроллера), который могут вызывать оба. Затем, если этому коду нужны какие-то аргументы, добавьте их в качестве аргументов функции в метод службы и передайте его от контроллера. Таким образом, контроллер получает значение аргумента (GET, POST или что-либо еще, может отличаться в разных контроллерах), просто передает его службе, а затем получает результат.
2. @MagnusEriksson хорошо, предположим, что у вас есть это значение в вашем URL(
http://localhost/leads/listsreport?status=9
). Теперь вы хотите получить доступ кstatus=9
значению в контроллере ajaxleadsreport. Не могли бы вы рассказать мне кодовым способом, как я могу этого достичь?
Ответ №1:
Вы можете использовать флэш-данные здесь:
Установите свой статус на flashdata, а затем получите его в отчете ajaxleadsreport следующим образом: (данные flashdata существуют только один раз при следующем запросе)
$this->session->set_flashdata('status', $status1);
В отчете ajaxleadsreport:
$this->session->flashdata('status');
Ответ №2:
В классе контроллера объявите переменную:
protected $status1;
public function listsReport() {
$this->status1 = $this->input->get('status');
// [...]
}
Затем вы можете получить доступ $this->status1
из любой функции, которая будет вызвана после.