#php #jquery #ajax #codeigniter
Вопрос:
В настоящее время у меня есть таблица, которая показывает количество всех статусов продукта. Теперь эти подсчеты доступны для кликабельности и ведут на другую страницу, на которой отображаются подробные данные о любом элементе, на который был сделан щелчок. Я могу получить эти данные, введя их в URL-адрес с помощью
lt;a target='_blank' href='".site_url('reports/lists?source=' . $title . 'amp;status=' . $status) . "'gt;
Это правильно помещает данные о продукте, на который я нажал, в URL-адрес. Теперь я пытаюсь получить эти данные из URL-адреса и, соответственно, отфильтровать данные в соответствии со значениями, которые присутствуют в URL-адресе, но я не могу получить значение из URL-адреса, чтобы отфильтровать его, даже после того, как я использовал $leadsource = $this-gt;input-gt;get('status');
Просмотр Класса:
lt;?php $sess=$this-gt;session-gt;userdata(); $post = array('fstatus'=gt; $sess['fstatus'],'fsource'=gt; $sess['fsource']); $postd = json_encode(array_filter($post)); $leadstatus = $this-gt;input-gt;get('source'); ?gt; lt;table id="item-list"gt; lt;trgt; lt;thgt;Ref.No#lt;/thgt; lt;thgt;Sourcelt;/thgt; lt;/trgt; lt;/tablegt; lt;scriptgt; $(document).ready(function() { function sendreq(){ setpostdatas();cleartable();getleads(); } var userrole = "lt;?php echo $this-gt;session-gt;userdata('clientrole')?gt;"; var leadsource = "lt;?php echo $leadsource ?gt;"; var slug = 'lt;?php echo $slug?gt;'; var postd = 'lt;?php echo $postd; ?gt;'; if( userrole gt; 1 amp;amp; userrole != 5){ $('#item-list').DataTable({ "processing": true, "stateSave": true, "serverSide": true, "ordering": false, "createdRow": function( row, data, dataIndex){ $(row).has( "div.overdueupdate" ).css('background-color','#FFC7CE'); }, "ajax": { url: "lt;?php echo site_url(); ?gt;reports/loadLeads", data: {slug: slug, postdata: postd, leadsource: leadsource}, type : 'POST', "dataSrc": function ( d ) { d.myKey = "myValue"; if(d.recordsTotal == 0 || d.data == null){ $("#item-list_info").text("No records found"); $("#item-list_processing").css("display","none"); } return d.data; } }, 'columns': [ {"data": "id", "id": "id"}, {"data": "refno", "refno": "refno"}, {"data": "source", "source": "source"}, ] }); }
Класс Контроллера:
public function loadLeads($p=''){ $leadsource = $this-gt;input-gt;get('status'); if(isset($_POST['postdata'])){ if($_POST['postdata'] != null amp;amp; $_POST['postdata'] != 'null'){ $post=$_POST['postdata']; } $post = json_decode($post,true); unset($post['slug']); unset($post['page']); $sort = $post['afsort']; if($sort == "asc"){ $sortQ = 'l.updated_date asc,'; }else if ($sort == "desc"){ $sortQ = 'l.updated_date desc,'; } } $offset = (int)$_POST['start'] ; $pstdatas = explode(',', $_POST['postdata']); unset($pstdatas['item-list_length']); if($this-gt;session-gt;userdata('clientrole') == 1 || $this-gt;session-gt;userdata('clientrole') == 5 ){ $content['leads']=$this-gt;leads_model-gt;get_pagination($_POST['length'],$offset,$where,'',false,$sortQ?$sortQ:'l.assign_status ='Unassigned' desc,',$all,$leadsource); }else{ $content['leads']=$this-gt;leads_model-gt;get_pagination($_POST['length'],$offset,$where,'',false,$sortQ?$sortQ:'l.assigned_date desc,',$all,$leadsource); } public function lists($slug='') { $this-gt;load-gt;model(array('crm/crm_model')); $content['propertyrefnos']=$this-gt;crm_model-gt;property_refnos(); $content['is_mobile'] = $this-gt;ismob; $content['sources']= $this-gt;sources_model-gt;get_active(array(),'id,title','title asc' ); }
Класс Модели:
function get_pagination($num, $offset, $cond='',$order='',$unlimit=false,$add_order='',$all='',$leadsource) { $this-gt;db-gt;select("l.*"); $sess=$this-gt;session-gt;userdata(); if(is_array($cond) amp;amp; count($cond)gt;0){ $this-gt;db-gt;where($cond); } if(empty($cond)){ if($sess['afstatus']==''){ $leadsource = $this-gt;input-gt;get('status'); if($searchdata['keyword'] !='' || $searchdata['fstatus'] !='' || $searchdata['fproject'] || $searchdata['fdevelop'] || $all != ''){ $this-gt;db-gt;where_in('lead_status',array(1,8,9,2,3,4,10,11)); $this-gt;db-gt;where('lead_source',$leadsource); } else { $this-gt;db-gt;where_in('lead_status',array(1,8,9,11)); $this-gt;db-gt;where('lead_source',$leadsource);} } } .... $query = $this-gt;db-gt;get(); return $query-gt;result_array();
Здесь, как вы можете видеть, я попытался добавить $leadsource = $this-gt;input-gt;get('status');
в свой класс контроллера и свою модель, но ни один из них не возвращает мне данные URL, которые я хочу. Но если поместить этот код в контроллер функции «Мои списки», он вернет мне данные из URL-адреса, но я хочу, чтобы это произошло в моей функции loadLeads.
Я добавил следующее в свой контроллер загрузки, и вывод источника всегда равен нулю:
$output = array( "source" =gt; $leadsource, "data" =gt; $data ); echo json_encode($output); exit();
Комментарии:
1. Что вы пытались сделать, чтобы решить эту проблему? Где ты застрял? Что же
$leadsource
в нем содержится?2.
$leadsource
должен содержать мои URL-данные. Так что на данный момент , если мой URL естьhttp://localhost/reports/lists?source=Product1amp;status=4
, то leadsource должен содержатьProduct1
. Теперь это работает, когда я добавляю этот оператор в свой контроллер списков, но он не работает, когда он добавляется в мой контроллер загрузок. Вот где я застрял3. И что же
$leadsource
в нем содержится? Не гадай, не объясняй, брось это4. Да, я сделал var_dump($leadsource) в контроллере списков и контроллере загрузок. Он отображается, когда он находится в контроллере списков, но не тогда, когда он находится в загрузках. Когда я пытаюсь поместить его в заголовки и обновить страницу, она выдает
DataTables warning: table id=item-list - Invalid JSON response.
Ответ №1:
Вы должны фиксировать параметры в своем контроллере, а не в своем режиме.
$leadsource = $this-gt;input-gt;get('status');
И поскольку эти параметры передаются по URL-адресу, вы должны получить к ним доступ с помощью $_GET
.
public function loadLeads($p=''){ $leadsource = $this-gt;input-gt;get('status'); // your other controller codes here }
Комментарии:
1. Когда я пытаюсь поместить его в заголовки и обновить страницу, которую он выдает
DataTables warning: table id=item-list - Invalid JSON response
.