Ajax在这种情况下不起作用,我也不知道为什么

时间:2019-07-24 13:28:43

标签: javascript php jquery html ajax

我正在尝试从php文件中接收一些数据作为json,php似乎也不错,而html也不错,但是jQuery文件没有执行.done功能,我找不到原因。 我使用的Jquery版本是3.1.0,我在使用样式引导程序,但我认为这并不重要。

HTML文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Registro Chat</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<h1>Chat 2.0</h1>
<div class="container col-md- mt-4">
    <form id="formulario">
      <div class="form-group">
        <label for="usuario">Nombre de Usuario</label>
        <input type="text" class="form-control" id="usuario" aria-describedby="emailHelp" placeholder="Introduzca el nombre de usuario">
        <p id="p-usuario"></p>
      </div>
      <div class="form-group">
        <label for="email">Email</label>
        <input type="text" class="form-control" id="email" aria-describedby="emailHelp" placeholder="Introduzca su email">
        <p id="p-email"></p>
      </div>
      <div class="form-group">
        <label for="contra1">Contraseña</label>
        <input type="password" class="form-control" id="contra1" aria-describedby="emailHelp" placeholder="Introduzca una contraseña">
        <p id="p-contra1"></p>
      </div>
      <div class="form-group">
        <label for="contra2">Repita la Contraseña</label>
        <input type="password" class="form-control" id="contra2" placeholder="Repita su contraseña">
        <p id="p-contra2"></p>
      </div>
      <button type="submit" class="btn btn-success bg-success">Enviar</button>
      <a href="principal.html"><button type="button" class="btn btn-success bg-success">Inicio de Sesión</button></a>
    </form>
</div>  
<script src="//code.jquery.com/jquery-3.1.0.min.js"></script>
<script src="accionregistro.js"></script>
</body>
</html>

JQuery文件:

$(document).ready(principal);

function principal(){

$('#formulario').submit(runAjax);
}

function runAjax(event){

var enviados = {
    'usuario' : $('#usuario').val(),
    'email' : $('#email').val(),
    'contra1' : $('#contra1').val(),
    'contra2' : $('#contra2').val()
    };

$.ajax({
    type        : 'POST',
    url         : 'backendregistro.php',
    data        : enviados,
    dataType    : 'json',
    encode      : true  
})
.done(function(datos){
    alert();

    if(datos.exito){
            alert();
            $('0#p-usuario').text(datos.mensaje);
    }else{
        if(datos.error.vacio){
                alert(datos.error.vacio);
                //$('#p-usuario').text(datos.error.vacio);
        }
        if(datos.error.usuario){
                $('#p-usuario').text(datos.error.usuario);
        }
        if(datos.error.email){
                $('#p-email').text(datos.error.email);
        }
        if(datos.error.notmatch){
                $('#p-contraseña1').text(datos.error.notmatch);
        }
        }

});
event.preventDefault();
}

PHP文件:

  <?php  
 $error=array();
 $datos=array();

         if(empty($_POST['usuario'])||empty($_POST['contra1'])||empty($_POST['contra2'])||empty($_POST['email'])){
$error['vacio']="No puede haber campos en blanco";
  }else{
  echo
  $usuario = $_POST['usuario'].
  $email = $_POST['email'].
  $contraseña1 = $_POST['contra1'].
  $contraseña2 = $_POST['contra2'];
  }
  //definimos la conexion a la base de datos
  $mysqli = new mysqli('localhost','chat','chat2019','chat');

  //comprobamos si el email ya existe
  $mysqli -> query("select * from users where email='".$email."'");
  if($mysqli->affected_rows!=0&&!empty($email)){
  $error['email']="Ese email ya está registrado";
  } 
  //comprobamos que no exista el usuario
  $mysqli->query("select * from users where user='".$usuario."'");
  if($mysqli->affected_rows!=0 && !empty($usuario)){
  $error['usuario']="Ya existe ese nombre de usuario";
  }

  //si no hay errores hacemos el insert
  if(empty($error)){
  $datos['exito']=true;
  $datos['mensaje']="Usuario registrado correctamente";
  $mysqli->query("insert into users values ('".$usuario."','".$contraseña1."','".$email."')");
  }else{
  $datos['exito']=false;
  $datos['error']=$error;
  }

  echo json_encode($datos);  

 ?>

当我尝试在控制台中查看是否一切正常时,似乎正在发送json,但完成功能无法正常工作。我对网络编程不太了解,我知道我的工作方式可能很不安全,但是我只想知道为什么它不起作用,谢谢。

2 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,在php文件中的函数ected_rows前后缺少空格。感谢您的回答。

答案 1 :(得分:-1)

首先,按照jQuery docdone回调类似于success。因此,您必须尝试添加fail()always()回调以确定响应。