0

Esta es mi parte de js:

$http({
                method : 'POST',
                url : window.location.protocol+'//'+ window.location.host+'/login/cambiar_password.php',
                data: postData,
                dataType: 'json',
                headers : {'Content-Type': 'application/x-www-form-urlencoded'}  

            }).then(function(response){
                if(response.data.success == true){
                    $().toastmessage('showToast',{text: '¡Cambio de contraseña exitoso recargue la pagina para iniciar sesión!', position: 'top-right', type: 'info'});

                }else{
                    $().toastmessage('showToast',{text: 'Ha habido un problema intentelo más tarde', position: 'top-right', type: 'info'});
                }
            },function error(jqXHR, textStatus, errorThrown){
                console.log(jqXHR.responseText + "Error" + textStatus + errorThrown);
                if (jqXHR.status === 0) {
                    $().toastmessage('showToast',{text: 'Not connect: Verify Network. Contactate con soporte', position: 'top-right', type: 'warning'});
                } else if (jqXHR.status == 404) {
                    $().toastmessage('showToast',{text: 'Requested page not found [404]. Contactate con soporte', position: 'top-right', type: 'warning'});
                } else if (jqXHR.status == 500) {
                    $().toastmessage('showToast',{text: 'Internal Server Error [500]. Contactate con soporte', position: 'top-right', type: 'warning'});
                } else if (textStatus === 'parsererror') {
                    $().toastmessage('showToast',{text: 'Requested JSON parse failed. Contactate con soporte', position: 'top-right',  type: 'warning'});
                } else if (textStatus === 'timeout') {
                    $().toastmessage('showToast',{text: 'Not connect: Verify Network.Time out error. Contactate con soporte', position: 'top-right', type: 'warning'});
                } else if (textStatus === 'abort') {
                    $().toastmessage('showToast',{text: 'Ajax request aborted. Contactate con soporte', position: 'top-right', type: 'warning'});
                } else {
                    $().toastmessage('showToast',{text: 'Uncaught Error: ' + jqXHR.responseText + '. Contactate con soporte', position: 'top-right', type: 'warning'});
                }
            });

Y esta es mi parte de php:

session_start();

require_once '../conn/conexion.php';

if($_POST){
    $validator = array('success' => false, 'response' => null);
    
    $usr= json_decode($_POST['usuario']);

    $sql = "CALL `SP_Bazar_Change_PWD`('$usr->correo', '$usr->password');";

    $result = $connect->query($sql);

    if (mysqli_num_rows($result) > 0) {
        $row = $result->fetch_array(MYSQLI_ASSOC);

        $validator['success'] = (bool)$row['Success'];
        $validator['response'] = $row['Response'];
    }
    else{
        $validator['success'] = false;
    }
    $connect->close();
    
    echo json_encode($validator);
}

El problema es que al finalizar la llamada response llega como "", únicamente por alterar el array $validator cosa que me parece super extraña, ya que si en lugar de response cambio a response => null o cualquier numero responde perfectamente, pero apenas le inserto un string deja de funcionar y llega vacío, al parecer solo pasa cuando le quiero poner un dato string ya que números y booleanos los manda sin problemas, alguna recomendación o sugerencia? se los agradecería mucho.

Gabo1603
  • 3
  • 2
  • Hola. ¿A qué te refieres con esto: *pero apenas le inserto un string deja de funcionar y llega vacío*? ¿Has verificado de algún modo ese **supuesto** dato string? ¿Qué muestra un `console.log(response);`? – A. Cedano Feb 28 '22 at 23:08
  • Hablo de que serializarle una cadena de texto en una de las variables hace que mi json llegue vacío por algún motivo, sin embargo cuando lo hago de esta manera, llega el json bien: echo '{"status": "'.$validator['status'].'", "message" : "'.$validator['message'].'" }'; es un tanto extraño la verdad – Gabo1603 Feb 28 '22 at 23:53
  • Sigo sin entender. ¿A qué te refieres con *serializarle una cadena de texto en una de las variables*? ¿Dónde exactamente haces tal cosa? – A. Cedano Feb 28 '22 at 23:59
  • mi variable $validator como puedes ver es un array al cual le inserto una cadena de texto en esta línea: $validator['response'] = $row['Response'] el problema es que cuando doy echo json_encode($validator); lo unico que me llega al js es un data vacío, sin embargo cuando mando números enteros, llegan perfectamente – Gabo1603 Mar 01 '22 at 00:05
  • Precisamente te pregunté en mi primer comentario si verificaste que en `$row['Response']` hay datos realmente ¿? La consulta puede estar arrojando resultados vacíos. ¿Qué pasa si cambias por una cadena escrita a mano en lugar de `$row['Response'] `? – A. Cedano Mar 01 '22 at 00:07
  • O sea, en lugar de esto: `$validator['success'] = (bool)$row['Success']; $validator['response'] = $row['Response'];` prueba con algo a mano: `$validator['success'] = true; $validator['response'] = 'Hola';` y si funciona sabrás que tu problema está en los datos que tienes **o que crees tener** en `$row`. – A. Cedano Mar 01 '22 at 00:08
  • Por otra parte, esto también está mal: `if(response.data.success == true){` porque en ningún momento tu respuesta tiene una clave `data`, deberías ponerlo así simplemente: **`if(response.success == true){`** es más, la misma comparación contra `true` está de más, esto bastaría: **`if(response.success){`** – A. Cedano Mar 01 '22 at 00:11
  • nop, esta línea está bien: response.data.success == true, lo se porque ya la eché a andar, pero ya encontré el problema, resulta que mi cadena de texto al parecer contenía caracteres como ñ y acentos que algo de ruido causaban al momento de procesarla, disculpa por hacerte perder el tiempo pero recién me estoy empapando de php y la verdad no sabía eso, gracias de igual manera, en efecto era problema de lo que venía en la cadena – Gabo1603 Mar 01 '22 at 00:22
  • Para evitar eso debes [aplicar una codificación adecuada en diferentes niveles](https://es.stackoverflow.com/a/59510/29967): HTML / PHP / Base de datos y convendría también poner un header con codificación adecuada antes de emitir la respuesta al cliente. En cuanto a lo que te comento sobre la clave `data` me extraña que funcione, pues no veo una clave llamada `data` en tu respuesta de servidor. Pero, en fin, si dices que funciona, no hay problema. – A. Cedano Mar 01 '22 at 00:26
  • el `data` es la variable donde se encuentra tu respuesta del servidor dentro del objeto `response` (aunque en realidad le puedes asignar el nombre que desees) al hacer una llamada por http o ajax desde javascript – Gabo1603 Mar 01 '22 at 00:32
  • Yo uso directamente el valor entre paréntesis (`response` en este caso) y funciona perfectamente, pues `response` es ya la respuesta del servidor, el JSON en este caso. Quizá a ti te funciona así porque tienes una mezcla algo extraña, entre una petición Ajax de jQuery y Promesas de Javascript ¿? – A. Cedano Mar 01 '22 at 12:53

0 Answers0