Tengo esta función ajax para iniciar sesión.
Editar: acabo de notar que este servidor ejecuta php7 mientras que otro servidor donde el inicio de sesión funciona usa php5. ¿Qué ha cambiado en php que este script ya no funciona?
Edición 2: parece que el método de solicitud del servidor no se publica, sino que se cambia para obtener, ¿por qué?
Solución: necesitaba eliminar el .php de la url: "./ajaxcall/login.php", porque uso bastante url htaccess.😅
var InName = $('#InName').val(); var InPass = $('#InPass').val(); alert(InName); $.ajax({ type: "POST", url: "./ajaxcall/login.php", dataType: "json", data: {InName:InName, InPass:InPass}, error: function (request, error) { console.log(arguments); alert("Inlog Can't do because: " + error); }, success : function(data){ if (data.code == "200"){ $("#InErEr").html(data.msg); //window.location.reload(true); } else { $("#InErEr").html(data.msg); $('.lds-dual-ring').animate({opacity: 0}, 300); } } }); En la alert(InName); Obtengo el valor correcto del nombre de usuario. Pero cuando reviso mi archivo php $_POST['InName'] está vacío.
Parte del archivo php
include('../config.php'); if(empty($_POST['InName'])) { $Ierror = 'Username is required.'; } if($_POST['InPass'] == '') { $Ierror = 'Password is required.'; } $username = $_POST['InName']; $passwordL = $_POST['InPass']; // count user in between // if($Inlognumber_of_rows == 0) { $Ierror = 'Username not found.'; } else { // password check // if(password_verify($salty_pass, $hashed_password)) { } else { $Ierror = 'Password incorrect.'; } } if ($Ierror == '') { // do login // } else { $showerror = '<span style="color:#F00;">'.$Ierror.$username.$passwordL.$_POST['InName'].$_POST['InPass'].'</span>'; echo json_encode(['code'=>404, 'msg'=>$showerror]); exit; }En el mensaje de respuesta, $showerror solo obtengo, Nombre de usuario no encontrado, sin los valores publicados. Entonces, ¿el inicio de sesión no funciona debido a valores vacíos? El usuario también está presente en la base de datos, por supuesto. Tampoco obtengo los errores de $_POST vacíos. Entonces, para colmo, en javascript obtengo el valor correcto para InName pero no en php.
Estás cerca pero tu captura de error no es correcta... prueba esto (Jquery):
var InName = 'something'; var InPass = 'morething'; $.post("./ajaxcall/login.php", { InName: InName, InPass: InPass }, function(data, status) { console.log(data, status); }).done(function() { alert("second success"); }) .fail(function() { alert("error"); }) .always(function() { alert("finished"); });en su archivo php simplemente haga print_r($_POST); y recibirás esto en tu consola...:
Array ( [InName] => something [InPass] => morething ) successBásicamente, estaba tratando de imprimir el error donde debería haber consolado el registro de request.responeText ...
Un buen truco para saber si las publicaciones llegaron al php, incluso si no se muestra el archivo console.log, es hacer esto en el archivo php:
<?php print_r($_POST) ; $newfile = fopen('newfile.txt','a'); fwrite($newfile,json_encode($_POST)); fclose($newfile);Esto imprimirá y también almacenará en un archivo local los datos de la publicación....