2016-01-07 2 views
0

У меня есть ошибка, которая «JSON не может быть разобрана». Это вызвано ошибкой форматирования JSON.У меня есть ошибка, связанная с JSON

function aj() { 
    $('#accounting').dataTable({ 
     'bProcessing': true, 
     'bServerSide': true, 
     "bSort": true, 
     'bDestroy': true, 
     "bAutoWidth": false, 
     'sPaginationType': "full_numbers", 
     'iDisplayLength': 25, 
     'sAjaxSource': 'admin/datatables/accounting/ledger.php?userID=' + $('#users').val(), 
     'aoColumns': [ 
      { 'mData': 'count' }, 
      { 'mData': 'AccountID' }, 
      { 'mData': 'Debit' }, 
      { 'mData': 'Credit' }, 
      { 'mData': 'CurrencyID' }, 
      { 'mData': 'Date' }, 
      { 'mData': 'Terms' }, 
      { "mData": 'Actions' } 
     ] 
    }); 
} 
<select onchange="aj();" id="users"> 
    <option value=""></option> 
    <?php 
     $Acc = new BLL\Accounts; 
     $Acc->get($arrayOfObjects); 
     if (!empty($arrayOfObjects)) { 
      foreach ($arrayOfObjects as $value) { 
       echo "<option value=" . $value->getID() . "> " . $value->getAccountName() . "</option>"; 
      } 
     } 
    ?> 
</select> 

ledger.php является

<?php 
require_once '../../../layers/loader.php'; 
require_once '../../../includes/config.php'; 
require_once '../../../includes/session.php'; 
if ((isset($_SESSION['sess_staffid'])and $_SESSION['sess_staffid']!="")) { 
    $StaffID = $_SESSION['sess_staffid']; 
} else { 
    header("Location:" . SITE_URL . "/404.html"); 
    exit; 
} 
global $TablePrefix; 

$aColumns = array('ID', 'Date', 'Terms', 'AccountID', 'Amount', 'CurrencyID', 'TypeAccount'); 
// 
// /* Indexed column (used for fast and accurate table cardinality) */ 
$sIndexColumn = "ID"; 
// 
// /* DB table to use */ 
$sTable = $TablePrefix . 'general_ledger'; 

// 
// /* Database connection information */ 
// $gaSql['user']  = 'root'; 
// $gaSql['password'] ='' ; 
// $gaSql['db']   = 'mowena'; 
// $gaSql['server']  = "localhost"; 
//$mySQL = new MySQL(); 
//  $mySQL = new DAL\Database\MySQL(); 

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* If you just want to use the basic configuration for DataTables with PHP server-side, there is 
* no need to edit below this line 
*/ 

/* 
* Local functions 
*/ 
function fatal_error($sErrorMessage = '') { 
    header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); 
    die($sErrorMessage); 
} 

/* 
* Paging 
*/ 
$sLimit = ""; 
if (isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1') { 
    $sLimit = "LIMIT " . mysql_real_escape_string($_GET['iDisplayStart']) . ", " . 
      mysql_real_escape_string($_GET['iDisplayLength']); 
} 


/* 
* Ordering 
*/ 
// $sOrder = "ORDER BY CourierID DESC "; 
if (isset($_GET['iSortCol_0'])) { 
    $sOrder = "ORDER BY "; 
    for ($i = 0; $i < intval($_GET['iSortingCols']); $i++) { 
     if ($_GET['bSortable_' . intval($_GET['iSortCol_' . $i])] == "true") { 
      $iColumnIndex = array_search($_GET['mDataProp_' . $_GET['iSortCol_' . $i]], $aColumns); 
      $sOrder .= $aColumns[$iColumnIndex] . " 
        " . mysql_real_escape_string($_GET['sSortDir_' . $i]) . ", "; 
     } 
    } 

    $sOrder = substr_replace($sOrder, "", -2); 
    if ($sOrder == "ORDER BY") { 
     $sOrder = "ORDER BY ID DESC"; 
    } 
} 
$sOrder = "ORDER BY ID DESC"; 

/* 
* Filtering 
* NOTE this does not match the built-in DataTables filtering which does it 
* word by word on any field. It's possible to do here, but concerned about efficiency 
* on very large tables, and MySQL's regex functionality is very limited 
*/ 
$sWhere = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") { 
    $sWhere = "WHERE ("; 
    for ($i = 0; $i < count($aColumns); $i++) { 
     if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true") { 
      $sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch']) . "%' OR "; 
     } 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i = 0; $i < count($aColumns); $i++) { 
    if (isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true" && $_GET['sSearch_' . $i] != '') { 
     if ($sWhere == "") { 
      $sWhere = "WHERE "; 
     } else { 
      $sWhere .= " AND "; 
     } 
     $iColumnIndex = array_search($_GET['mDataProp_' . $i], $aColumns); 
     $sWhere .= $aColumns[$iColumnIndex] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch_' . $i]) . "%' "; 
    } 
} 
if(isset($_REQUEST['userID']) and $_REQUEST['userID']!=''){ 
$sWhere=" WHERE AccountID=".$_REQUEST['userID']; 
} 


/* 
* SQL queries 
* Get data to display 
*/ 

$sQuery1 = " 
     SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ", implode(", ", $aColumns)) . " 
     FROM $sTable 
     $sWhere 
     $sOrder 
     $sLimit 
    "; 
$rResult = mysql_query($sQuery1) or fatal_error('MySQL Error: ' . mysql_errno()); 

/* Data set length after filtering */ 
$sQuery = " 
     SELECT FOUND_ROWS() 
    "; 
$rResultFilterTotal = mysql_query($sQuery) or fatal_error('MySQL Error: ' . mysql_errno()); 
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); 
$iFilteredTotal = $aResultFilterTotal[0]; 

/* Total data set length */ 
$sQuery = " 
     SELECT COUNT(" . $sIndexColumn . ") 
     FROM $sTable 
    "; 
$rResultTotal = mysql_query($sQuery) or fatal_error('MySQL Error: ' . mysql_errno()); 
$aResultTotal = mysql_fetch_array($rResultTotal); 
$iTotal = $aResultTotal[0]; 


/* 
* Output 
*/ 
$output = array(
    "sEcho" => intval($_GET['sEcho']), 
    "iTotalRecords" => $iTotal, 
    "iTotalDisplayRecords" => $iFilteredTotal, 
    "aaData" => array() 
); 


$count = $_GET['iDisplayStart'] + 1; 
while ($aRow = mysql_fetch_array($rResult)) { 
    $row = array(); 
    for ($i = 0; $i < count($aColumns); $i++) { 
     if ($aColumns[$i] == 'Date') { 
      $row[$aColumns[$i]] = Date('Y-m-d', strtotime($aRow['Date'])); 
     } elseif ($aColumns[$i] == 'Active') { 
      if ($aRow[$aColumns[$i]] == 'Y') 
       $row[$aColumns[$i]] = 'Yes'; 
      else 
       $row[$aColumns[$i]] = 'NO'; 
     }elseif ($aColumns[$i] == 'Terms') { 
      if(!empty($aRow['Terms'])){ 
      $row[$aColumns[$i]] = "<textarea style='width:220px;height:50px'>".$aRow['Terms']."</textarea>";} 
      else{ 
       $row[$aColumns[$i]]="---"; 
      } 
     }elseif (!empty($aColumns[$i])) { 
      /* General output */ 
      $row[$aColumns[$i]] = '<font>' . $aRow[$aColumns[$i]] . ' </font>'; 
     } 
    } 



    $AccountID = $aRow[AccountID]; 

    $account = new BLL\Accounts; 
    $account->setID($AccountID); 
    $account->get($arrayOfacc); 
    if (!empty($arrayOfacc)) { 
     $arrayOfacc = $arrayOfacc[0]; 
     $row['AccountID'] = "<a href='user-account.php?accountid=".$aRow[AccountID]."'>".$arrayOfacc->getAccountName()."</a>"; 
    } 
    $Currency = new BLL\Currency(); 
    $Currency->setCurrencyID($aRow[CurrencyID]); 
    $Currency->get($arrayOfCurr); 
    if (!empty($arrayOfCurr)) { 
     $arrayOfCurr = $arrayOfCurr[0]; 
     $row['CurrencyID'] = $arrayOfCurr->getCurrencyCode(); 
    } 
    $AccountType = $aRow[TypeAccount]; 
    switch ($AccountType) { 
     case 0: 
      $row['Debit'] = $aRow[Amount]; 
      $row['Credit'] = '-'; 
      break; 
     case 1: 
      $row['Credit'] = $aRow[Amount]; 
      $row['Debit'] = '-'; 
      break; 

     default: 
      break; 
    } 
    $row['Actions'] = '<a id="edittr'.$aRow[ID].'" onclick="edit_ledger(' .$aRow[ID]. ')"> Edit</a>&nbsp;|&nbsp;<a href="user-account.php?accountid='.$aRow[AccountID].'">view all</a>'; 
    $row['count'] = '<font size=2>' . $count++ . '</font>'; 

    $output['aaData'][] = $row; 
}//deal_paymentstatus($aRow[paymentstatus]) 

//echo json_encode($output); 
//  var_dump($output); 
?> 

'JSON не может быть разобран. Это вызвано JSON enter image description here Можете ли вы посоветовать мне, что я должен сделать, чтобы исправить это?

---------------------------------------------- Ошибка

случилось

После того как я изменил какую-то часть JSON, который предлагается

aoColumns = [ 
{"mData":"count"},{"mData":"AccountID"}, 
{"mData":"Debit"},{"mData":"Credit"}, 
{ "mData": "CurrencyID"}, 
{"mData":"Date"}, 
{"mData":"Terms"}, 
{"mData":"Actions"} 
] 

следующая часть кода не работает

<div class="DTED_Lightbox_Content" id="DTED_Lightbox_Content1" tabindex="-1" style="width: 40%;display: none;position:absolute;top:25%;left:25%;z-index: 1000" > 
    <h1>amir</h1> 
    <div class="DTE DTE_Action_Create"> 
     <div data-dte-e="processing" class="DTE_Processing_Indicator" id="DTE_Processing_Indicator1" style="display:none"></div> 
     <div data-dte-e="head" class="DTE_Header"> 
      <div data-dte-e="head_content" class="DTE_Header_Content">Edit Account Group </div> 
     </div> 
     <div data-dte-e="body" class="DTE_Body"> 
      <div data-dte-e="body_content" class="DTE_Body_Content" style="height: 400px;"> 
       <form data-dte-e="form" class="" style="display: block;"> 
        <div data-dte-e="form_content" class="DTE_Form_Content"> 
         <div id="peymethod1"> 
          <table> 
           <tr><td>Account Name:</td><td><select id="account_name1"> 
              <option value="">Select account name </option> 
              <?php 
              $Acc = new BLL\Accounts; 
              $Acc->get($arrayOfObjects); 
              if (!empty($arrayOfObjects)) { 
               foreach ($arrayOfObjects as $value) { 
                echo "<option value=" . $value->getID() . "> " . $value->getAccountName() . "</option>"; 
               } 
              } 
              ?> 
             </select></td></tr> 
           <tr><td>Date:</td><td><input type="text" id="date3" value="" name="account-date"/></td></tr> 
           <tr><td>Amount:</td><td><input type="text" value="" name="account-amount" id="amount1"/></td></tr> 
           <tr><td>Account Type:</td><td><select id="account_type1"> 
              <option value="">Select account Type</option> 
              <option value="0">Debit</option> 
              <option value="1">Credit</option> 
             </select></td></tr> 
           <tr><td>Currency:</td><td><select id="currency1"> 
              <option value="">Select Currency</option> 
              <option value="2">EUR</option> 
              <option value="1">USD</option> 
             </select></td></tr> 
           <tr><td>term:</td><td><textarea name="account_term" id="term1"></textarea></td></tr> 
          </table> 
         </div> 

         <div class=""> 
          <div data-dte-e="input" class=""> 
           <div data-dte-e="msg-message" class="DTE_Field_Message"></div> 
           <div data-dte-e="msg-info" class="DTE_Field_Info"></div></div> 
         </div> 
         <div data-dte-e="form_error" class="DTE_Form_Error" id="DTE_Form_Error1" style="display: none;"> 
         </div> 
         <div data-dte-e="form_clear" class="DTE_Form_Clear" id="DTE_Form_Clear1"></div> 
        </div></form></div> 
     </div> 
     <div data-dte-e="foot" class="DTE_Footer"> 
      <div data-dte-e="foot_content" class="DTE_Footer_Content"> 
       <div data-dte-e="form_buttons" class="DTE_Form_Buttons" id="DTE_Form_Buttons1"><button class="butt">Update</button> 
        <input type="hidden" name="Gid" id="Gid" value=""/> </div></div></div></div> 
    <div class="DTED_Lightbox_Close" id="DTED_Lightbox_Close1" ></div></div> 




<div class="ui-widget-overlay" style="display: none;z-index: 1;width: 100%; height: 100%;"></div> 


<?php 
require_once 'footer.php'; 
?><br /> 

Любой может направлять?

+1

Вы забыли упомянуть, на какой строке вы получите сообщение об ошибке? Какая ошибка? – Jai

+1

Можете ли вы показать нам ответ ** ledger.php ** –

+0

, если 'users' - это список пользователей, вам может потребоваться использовать что-то вроде' selectedIndex' вместо 'val' – RST

ответ

0

Ваш неправильный формат joc формате aOColumns Пожалуйста, удалите пробелы и напишите следующий формат:

aoColumns = [ 
{"mData":"count"},{"mData":"AccountID"}, 
{"mData":"Debit"},{"mData":"Credit"}, 
{ "mData": "CurrencyID"}, 
{"mData":"Date"}, 
{"mData":"Terms"}, 
{"mData":"Actions"} 
] 
+0

Пробел делает нулевую разницу в форматировании объекта. Логически это и то, что имеет OP, идентично. –

+0

, но ошибка в формате json. формат неправильный. – RK12

+0

Это не имеет никакого отношения к объекту, который вы предоставляете столбцам в этом случае, и даже меньше относится к пробелу внутри этого объекта. –

0

URL 'sAjaxSource' должен содержать данные JSon закодировать

Используйте http://jsonlint.com/ для проверки JSon данных

версия, которая отлично работает для меня:

JQuery-1.7.1, jquery.dataTables 1.9. 0

+0

Это совершенно неверно, свойство должно быть строкой с URL-адресом. См. Запись 'sAjaxSource' в документации: http://legacy.datatables.net/usage/server-side –

+0

Пожалуйста, chk: Объект JSOn должен быть передан Вы можете указать DataTables для загрузки данных из внешнего источника с помощью этого параметра (используйте aData, если вы хотите передать данные, которые у вас уже есть). Просто укажите URL-адрес объекта JSON, который можно получить из ,Этот объект должен включать параметр 'aaData', который является источником данных для таблицы. – shalini

+0

Точно так же 'sAjaxSource' должен быть строкой, а не закодированными JSON-данными. –

0

Проблема, кажется, эта часть:. + $ («# Пользователя») Val()

Когда я оставить это, формат JSON кажется справедливым, если я проверить его с онлайн-читателей JSon (я http://jsonviewer.stack.hu/, но их много).

Причина, по которой , вероятно, заключается в том, что вы не можете добавить код javascript/jquery внутри строки json.

Смежные вопросы