jQuery和PHP的 AJAX 请求总是返回JSON?

mcdcgff0  于 2023-08-08  发布在  jQuery
关注(0)|答案(1)|浏览(135)

当用户提交信息时,我正在用PHP做 AJAX 请求进行验证,但我遇到了一个问题,因为当我发出AJAX请求时,它在转换PHP抛出的JSON时抛出了一个错误,因为它告诉我以下错误:
未捕获的语法错误:“[object Object]”不是有效的JSON
当我尝试将响应转换为JavaScript对象时,会出现以下行。
var jsonData = JSON.parse(response);
但如果我尝试不转换它,它的工作与:
var jsonData = response;
我知道PHP必须返回JSON作为响应,而不是对象。
AJAX :

let nombre = $nombre.value.trim();
        let apellidos = $apellidos.value.trim();
        let correo = $correo.value.trim();
        let telefono = $telefono.value.trim();
        
        //
        $.ajax({
            
            url: '../includes/email-check.php',
            type: 'POST',
            data: {nombre, apellidos, correo, telefono},
            success: function(response){

                var jsonData = JSON.parse(response);
                console.log(jsonData);

                if(jsonData.email === true && jsonData.phone === true){
                    $formInput.submit();
                }else{
                    if(jsonData.email === false)
                        showError($correo, "El correo ya existe, ingresa otro.");
                    if(jsonData.phone === false)
                        showError($telefono, "El teléfono ya existe, ingresa otro.");
                }   
            },
            
            error: function(jqXHR,textStatus, errorThrown){
                console.error("AJAX Error:",textStatus,errorThrown);
            }
        });

字符串
PHP代码:

require dirname(__DIR__) . "../db.php";

    //we get the data that was sent from the ajax request
    $nombre = $_POST['nombre'];
    $apellidos = $_POST['apellidos'];
    $correo = $_POST['correo'];
    $telefono = $_POST['telefono'];

    if(!empty($correo) && !empty($telefono) && !empty($nombre) && !empty($apellidos)){

        $text = "/^[a-zA-ZáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/";

        $message = [
            "name" => true,
            "lastnames" => true,
            "email" => true,
            "phone" => true,
        ];
        //$telefono = preg_replace('/\D/', '', $telefono);
        

        if(strlen($nombre) < 3 || strlen($nombre) > 30 || !preg_match($text,$nombre))
            $message["name"] = false;
        
        if(strlen($apellidos) < 5 || strlen($apellidos)>60 || !preg_match($text,$apellidos))
            $message["lastnames"] = false;
        

        $stmt = $conn->prepare("SELECT * FROM socio WHERE correo = :email OR telefono = :telephone");
        $stmt->bindParam(':email', $correo);
        $stmt->bindParam(':telephone', $telefono);
        $stmt->execute();

        $stmt -> setFetchMode(PDO::FETCH_ASSOC);
        $result = ($stmt -> fetchAll());
        
        if(!empty($result)){
            foreach($result as $row){
                if($row["correo"] === $correo)
                    $message["email"] = false;
                elseif ($row["telefono"] === $telefono)
                    $message["phone"] = false;
            }
        }

        //Convert PHP data into the JSON format
    
        Header('Content-Type: application/json; charset=UTF8');
        echo json_encode($message);

    }


如果我尝试用:
var jsonData = response;
它的作品,但我不知道为什么。

zpgglvta

zpgglvta1#

如果有疑问,您应该查看文档。你可以看到jQuery.ajax Docs声明json是自动解析的。

转换器(默认:{"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML})类型:PlainObject包含dataType到dataType转换器的对象。每个转换器的值都是一个函数,它返回响应的转换值。(添加的版本:1.5

相关问题