У меня есть таблица, в которой зарегистрированы пользователи. Когда я дам вам удалить одну, я хочу получить подтверждающее сообщение, и если вы нажмете «принять», отправьте мне запрос по номеру ajax. Я делюсь своими кодами для наблюдения:
const eliminar=document.querySelectorAll('.delete'),
tablaContactos=document.querySelector('#tabla-contactos');
//asignarles un evento mediante un bucle
eliminar.forEach(index => {
index.addEventListener('click',eliminarUsuario);
});
function eliminarUsuario(e){
/* Con la propiedad target podemos identificar a que elemento se le ha dado click */
if(e.target.parentElement.classList.contains('btn-eliminar')){
/* Para obtener una propiedad html utilizamos el metodo getAttribute */
const id=e.target.parentElement.getAttribute('data-id');
const data=new FormData();
data.append('id',id);
const respuesta=confirm('¿Estas seguro que deseas eliminar usuario '+id+'?');
if (respuesta){
// Creación del objeto
const xhr=new XMLHttpRequest();
// Apertura de la conexión y envío a través del metodo get
xhr.open('POST','http://localhost/Facturacion/usuario/eliminar',true);
// Lectura de la respuesta
xhr.onload=function(){
if(this.status===200){
const respuesta=JSON.parse(xhr.responseText);
console.log(respuesta);
if (respuesta.respuesta=='exito') {
mostrarNotificacion('Contacto eliminado correctamente','correcto');
}
else{
mostrarNotificacion('Hubo un error','error');
}
}
}
//Envío de la petición
xhr.send(data);
}
}
}
function mostrarNotificacion(mensaje,clase){
//Creamos un div y posteriormente una clase
const notificacion=document.createElement('div');
//En javascript añadimos clase de la siguiente manera. Cabe destacar que podemos añadir mas de dos
notificacion.classList.add(clase,'notificacion');
//Dentro del div añadimos un texto con el metodo textContent.
notificacion.textContent=mensaje;
//añadimos el div en el formulario mediante insertBefore.
tablaContactos.insertBefore(notificacion,document.querySelector('table'));
/* Funcion para hacer animacion en javascript */
setTimeout(()=>{
notificacion.classList.add('visible');
setTimeout(() => {
notificacion.classList.remove('visible');
setTimeout(() => {
notificacion.remove();
}, 500);
}, 3000);
},100);
}
public function deleteUser($id){
$sql="DELETE FROM usuario WHERE idusuario=$id";
$stmt=$this->db->query($sql);
return $stmt;
}
public function eliminar(){
Utils::isAdmin();
if (isset($_POST)) {
$objUsuario=new Usuario();
$result=$objUsuario->deleteUser(intval($_POST['id']));
if ($result){
$respuesta=array(
'respuesta'=>'exito',
'id_eliminado'=>$_POST['id']
);
}
else {
$respuesta=array(
'respuesta'=>'error'
);
}
}
die(json_encode($respuesta));
}
Запрос фактически выполняется, и пользователь удален, но в консоли я получаю эту ошибку:
VM1652:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at XMLHttpRequest.xhr.onload (eliminar-usuario.js?v=1586222368:29)
xhr.onload @ eliminar-usuario.js?v=1586222368:29
load (async)
eliminarUsuario @ eliminar-usuario.js?v=1586222368:27
но при проверке той части консоли, где отображаются запросы, я замечаю, что если вы получаете json от php драйвера
У меня будет ошибка в контроллере?