Executando verificação de segurança...
0

(AJUDA)[JAVASCRIPT] retorno indesejado da resposta PHP pelo JS

Olá, tudo certo galerinha? Feliz Natal a propósito.

Vamos lá, meu script captura o evento click do form html e envia para o JS para que chame o PHP cadastre e retorne com uma resposta de true ou false que será utilizada pelo SweetAlert para apresentar o alert.

Pelo meu pouco conhecimento nao consigo entender o motivo da response estar trazendo outra página PHP que fiz require para complementar o fluxo sendo que peço para o Json_enconde somente da resposta que é sim, ou nao.

Abaixo os códigos para que possam me ajudar!

const cadRegistroForm = document.getElementById("cad-registro-form");

if (cadRegistroForm) {

JS-----------------------------------------------------------------------------

cadRegistroForm.addEventListener("submit", async (e) => {

    e.preventDefault();

    const dadosForm = new FormData(cadRegistroForm);

    const dados = await fetch("cadastrar.php", {
        method: "POST", 
        body: dadosForm, 
    });
    const resposta = await dados.json();

    if (resposta['status']) {
        Swal.fire({
            text: resposta['msg'],
            icon: 'success',
            showCancelButton: false,
            confirmButtonColor: '#3085d9',
            confirmButtonText: 'Fechar'
        });
        // Limpar o formulário
        cadRegistroForm.reset();
        signaturePad.clear();
    } else {
        Swal.fire({
            text: resposta['msg'],
            icon: 'error',
            showCancelButton: false,
            confirmButtonColor: '#3085d6',
            confirmButtonText: 'Fechar'
        });
    }
});}

cadastrar.php--------------------------

``<?php
include_once './conexao.php';
include('protect.php');
$dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);


// Validação campos
if (empty($dados['Status'])) {
$retorna = ['status' => false, 'msg' => "Erro: É necessário definir o status!"];
} elseif (empty($dados['NomeCliente'])) {
$retorna = ['status' => false, 'msg' => "Erro: É necessário informar o nome do cliente!"];
} else { //Fim validação

$query_registra = "INSERT INTO BD (NomeCliente, Status) VALUES (:NomeCliente, :Status)";
$cad_registro = $conn->prepare($query_registra);

$cad_registro->bindParam(':NomeCliente', $dados['NomeCliente']);
$cad_registro->bindParam(':Status', $dados['Status']);
$cad_registro->execute();

//variaveis para passar para o envia_email
$id_gerado = $conn->lastInsertId();
$NomeCli = $dados['NomeCliente'];
$Status = $dados['Status'];



if ($cad_registro->rowCount()) {
    
    $retorna = ['status' => true, 'msg' => "Registro efetuado com sucesso!"];

    if ($dados['Status'] === 'CONFIRMADO') {
        $DestEmail = '[email protected]';
        $NomeDest = 'example1';
        $TituloEmail = 'Registrado!';
        require "enviar_email.php";
    }
} else {
    $retorna = ['status' => false, 'msg' => $cad_registro->errorInfo()];
}
}
echo json_encode($retorna);
``

O registro no BD e envio do e-mail acontecem normalmente, porem o SWAL nao retorna o alert e no console do navegador imprime o seguinte erro:

``{ 
Uncaught (in promise) SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON 
};``

abrindo o erro:

``<!DOCTYPE html>
<html>
<head>
  <!--<meta charset="iso 8859-1" />-->
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Envia E-mail</title>
</head>
<body>

Mensagem enviada com sucesso</body>
</html>

{"status":true,"msg":"Registro efetuado com sucesso!"}``

esta retornado tudo isso no JSON sendo que chamei somente a variavel $retorna, onde errei?

agradeço pela ajuda!

Carregando publicação patrocinada...
2

o que tem dentro desse enviar_email.php? acima da linha de json_encode() está saindo algum html.

por isso o javascript nao se entende, o js espera json e está encontrando uma tag html

1

ja ouviu falar em Antolhos? Antolhos é um acessório que se coloca na cabeça de animal de montaria ou carga para limitar sua visão e forçá-lo a olhar apenas para a frente, e não para os lados.

bem na minha cara estava meu script enviar_email pelo PHPMAILER criando uma pagina HTML para que fosse enviado, sem a menor necessidade sendo que o codigo PHP que faz todo o trabalho.

``
<!DOCTYPE html>
<html>
<head>
  <!--<meta charset="iso 8859-1" />-->
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <title>Envia E-mail</title>
</head>
<body>

<?php
include('protect.php');
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
``

exclui as tags e hora hora, tudo certo!

obrigado pelas palavras que me fizeram enchergar o óbvio.