Я пробовал оба, tableorter и datatables, чтобы получить функции сортировки. С обоими, я могу видеть стрелки сортировки (и поле фильтра, страницы … с dataTables; хотя они не работают ни один), и они изменяются, но данные не сортируются.
Вот ajax (с dataTables это то же самое, но с использованием ‘dataTable’ вместо ‘tablesorter’).
$.ajax({
type: "GET",
url: "search.php",
data: {data : encrypted.data, salt: enc_salt},
success: function(enc_response){
var response = decrypt_cryptojs(enc_response, encrypted.salt);
var data = JSON.parse(response);
$("#search_result").html(data);
// Initialise tablesorter
$('#search_table').tablesorter();
}
});
Я создаю таблицу с php:
if (mysqli_num_rows($result) > 0) {
$message .= "<table id='search_table' class='tablesorter'>
<thead><tr>
<th id='search_user'>Usuario</th>
<th id='search_name'>Nombre</th>
<th id='search_surnames'>Apelidos</th>
<th id='search_email'>Correo</th>
<th id='search_role'>Rol</th>
<th id='search_access'>Acceso</th>
<th id='search_center'>Centro</th>
<th id='search_edit'></th>
<th id='search_delete'></th>
</tr></thead>";
while ($row = mysqli_fetch_row($result)) {
// Define $id
$id = $row[7];
// Replace space(" ") whith " " to avoid errors inside functions
$user = str_replace(" ", " ", $row[0]);
$name = str_replace(" ", " ", $row[1]);
$surnames = str_replace(" ", " ", $row[2]);
$center = str_replace(" ", " ", $row[6]);
$message .= "<tbody><tr>
<td>" . $row[0] . "</td>" .
"<td>" . $row[1] . "</td>" .
"<td>" . $row[2] . "</td>" .
"<td>" . $row[3] . "</td>" .
"<td>" . $row[4] . "</td>" .
"<td>" . $row[5] . "</td>" .
"<td>" . $row[6] . "</td>" .
"<td>" .
"<input type='image' src='../resources/edit.png' id='edit_" . $row[0] . "' class='edit' onclick=edit_user(\"$user\",\"$name\",\"$surnames\",'$row[3]','$row[4]','$row[5]',\"$center\",'$id') title='Editar'></button>" .
"</td>" .
"<td>" .
"<input type='image' src='../resources/delete.png' id='delete_" . $row[0] . "' class='delete' onclick=delete_user('$user','$row[4]') title='Eliminar'></button>" .
"</td>
</tr>";
}
$message .= "</tbody></table>";
$message .= "<div id='modify_panel'></div>";
}
И после этого:
// Encode the message using json
$response = json_encode($message);
// Encrypt the response and send it.
$enc_response = encrypt_cryptojs($response, $salt);
echo $enc_response;
С таблицами данных я вижу сообщение о неверном ответе json.
«#search_result» находится в php-файле, который включен в другой php-файл.
Что я делаю не так?
Спасибо.
РЕДАКТИРОВАТЬ: Я нашел глупую ошибку, я генерировал несколько tbodys. Если я переместу тег за пределы времени, это сработает. Сожалею.
Похоже, что проблема, вероятно, в кодировании и обработке JSON.
JSON не может быть просто строкой. Он должен быть заключен в массив или объект, поэтому при использовании php json_encode
убедитесь, что он получает массив
// Encode the message using json
$response = json_encode(array($message));
Примечание: я не очень хорошо знаю php, поэтому этот пример может быть неправильным.
Теперь в javascript убедитесь, что вы получаете данные из первого элемента массива
var data = JSON.parse(response)[0];
Теперь data
должен быть готовым быть добавленным как HTML.
$("#search_result").html(data);
Других решений пока нет …