2017-04-27 91 views
-1

我是ajax的新手,在使用它执行表时遇到一些错误。此表具有搜索,排序和分页功能。在ajax中未定义的索引

function ajaxAction(action) 
     { 
      data = $("#frm_"+action).serializeArray(); 
      $.ajax({ 
       type: "POST", 
       url: "function.php", 
       data: data , 
       dataType: "json",  
       success: function(response) 
       { 
       $('#'+action+'_model').modal('hide'); 
       $("#employee_grid").bootgrid('reload'); 
       } 
      }); 
     } 

波纹管是使用此代码后,我的function.php代码

<?php 

include_once("connection.php"); 
session_start(); 

$db = new dbObj(); 
$connString = $db->getConnstring(); 

$params = $_REQUEST; 

$action = isset($params['action']) != '' ? $params['action'] : ''; 
$empCls = new cusinfo($connString); 

switch($action) 
{ 
default: 
$empCls->getEmployees($params); 
return; 
} 

class cusinfo 
{ 
protected $conn; 
protected $data = array(); 
function __construct($connString) 
{ 
    $this->conn = $connString; 
} 

public function getEmployees($params) 
{ 
    $this->data = $this->getRecords($params); 
    echo json_encode($this->data); 
} 



function getRecords($params) { 

    $rp = isset($params['rowCount']) ? $params['rowCount'] : 10; 

    if (isset($params['current'])) { $page = $params['current']; } else { $page=1; }; 

    $start_from = ($page-1) * $rp; 

    $sql = $sqlRec = $sqlTot = $where = ''; 

    if(!empty($params['searchPhrase'])) 
    { 
     $where .=" WHERE "; 
     $where .=" (NO_ID LIKE '".$params['searchPhrase']."%' ";  
     $where .=" OR TICKET_ID LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR CAT_C_B LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR ORDER_TYPE LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR RECEIVED_DATE LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR AGENT_STAFF_NAME LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR EFORM_ID LIKE '".$params['searchPhrase']."%' "; 
     $where .=" OR LATEST_ORDER_STATUS LIKE '".$params['searchPhrase']."%')"; 
    } 
    if(!empty($params['sort'])) 
    { 
     $where .=" ORDER By ".key($params['sort']) .' '.current($params['sort'])." "; 
    } 
    // getting total number records without any search 

    $tid = $_SESSION['sess_user_id']; 
    $sql = "SELECT * FROM `cusinfo` where AGENT_CODE_STAFF_ID = '$tid' "; 
    $sqlTot .= $sql; 
    $sqlRec .= $sql; 

    //concatenate search sql if value exist 
    if(isset($where) && $where != '') 
    { 
     $sqlTot .= $where; 
     $sqlRec .= $where; 
    } 
    if ($rp!=-1) 
    $sqlRec .= " LIMIT ". $start_from .",".$rp; 

    $qtot = mysqli_query($this->conn, $sqlTot) or die("error to fetch tot customer data"); 
    $queryRecords = mysqli_query($this->conn, $sqlRec) or die("error to fetch customer data"); 

    while($row = mysqli_fetch_assoc($queryRecords)) 
    { 
     $data[] = $row; 
    } 

    $json_data = array(
     "current"  => intval($params['current']), 
     "rowCount"  => 10,   
     "total"   => intval($qtot->num_rows), 
     "rows"   => $data // total data array 
     ); 

    return $json_data; 
} 


} 
?> 

,我的搜索功能不能work.And我得到的通知

Notice: Undefined index: current in C:\xxx\xxx\xxxx\function.php on line 92 
+0

你可以在代码中标出92行吗? –

+0

“current”=> intval($ params ['current']),.这个代码在 $ json_data = array –

+0

@ C.Norris猜它是在这里'intval($ params ['current']),' –

回答

1

既然你给了我92行的代码,

这可能帮助..

你已经没有条件语句

if (isset($params['current'])) { $page = $params['current']; } else { $page=1; }; 

所以,你应该再次使用,在你的其他代码 $

json_data = array(
     "current"  => $page, 
     "rowCount"  => 10,   
     "total"   => intval($qtot->num_rows), 
     "rows"   => $data // total data array 
); 
+0

后,搜索功能无法正常工作,该通知实际上不再显示,但我的搜索功能仍然无法工作。 –

1

你还没有验证$params['current']被定义为。

if (isset($params['current'])) { 
    $page = $params['current']; 
} else { 
    $page=1; 
}; 

但如果$params['current']未设置发生了什么:在这一行,如果$params['current']设置要检查?在第92行中,您总是使用$params['current'],不管它是否已定义,所以当未定义$params['current']时,您将得到未定义索引错误。您必须在使用此索引之前进行检查。

1

出现current未作为您的ajax请求中的参数传递。

你可以通过一个简短的句柄来处理这个异常,如果语句不存在,并且设置了默认值。像:

$json_data = array(
     "current"  => isset($params['current'])?intval($params['current']):1;, 
     "rowCount"  => 10,   
     "total"   => intval($qtot->num_rows), 
     "rows"   => $data // total data array 
    ); 

PHP 7介绍了空聚结运营商甚至进一步简化了这一说法,如果第一个参数不为空,将使用其他第二放慢参数将作为默认值。像这样:

$json_data = array(
    "current"  => intval($params['current']) ?? 1 
    "rowCount"  => 10,   
    "total"   => intval($qtot->num_rows), 
    "rows"   => $data // total data array 
); 

这是一个后端解决方案,用于处理未设置电流的情况。我还要检查你的Ajax数据正在准备看看为什么它没有被列入请求

+0

我已经改变了你的代码,通知不再显示。但我的搜索功能仍然无法正常工作。添加会话[tmid]到代码 –