当用户提交信息时,我正在用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;
它的作品,但我不知道为什么。
1条答案
按热度按时间zpgglvta1#
如果有疑问,您应该查看文档。你可以看到jQuery.ajax Docs声明json是自动解析的。
转换器(默认:
{"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}
)类型:PlainObject包含dataType到dataType转换器的对象。每个转换器的值都是一个函数,它返回响应的转换值。(添加的版本:1.5)