unexpected token < in JSON

134
14 апреля 2022, 13:30

помогите, не отправляется форма отправки на почту.

Вот PHP

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;
    require 'phpmailer/src/Exception.php';
    require 'phpmailer/src/PHPMailer.php';
    $mail = new PHPMailer(true);
    $mail->Charset = 'UTF-8';
    $mail->setLanguage('ru', 'phpmailer/language/');
    $mail->IsHTML(true);
    //От кого письмо
    $mail->setFrom('webmaster@dubinevich.ru', 'Илья Дубиневич');
    //Кому отправить
    $mail->addAddress('bucks20007@gmail.com');
    // Тема письма
    $mail->Subject = 'Привет, новая заявка!';
    //Тело письма
    $body = '<h1>Встречайте супер письмо</h1>';
    if(trim(!empty($_POST['name']))){
        $body.='<p><strong>Имя:</strong> '.$_POST['name'].'</p>';
    }
    if(trim(!empty($_POST['message']))){
        $body.='<p><strong>Сообщение:</strong> '.$_POST['message'].'</p>';
    }
    //Отправляем
    if (!$mail->send()) {
        echo 'Error';
    } else {
        header('location: thank-you.html');
    }
    $response = ['message' => $message];
    header('Content-type: application/json');
    echo json_encode($response);
?>

Вот JS

'use strict';
document.addEventListener('DOMContentLoaded', function() {
    const form = document.getElementById('form');
    const formOrder = document.getElementById('form-order');
    form.addEventListener('submit', formSend);
    formOrder.addEventListener('submit', formSend);
    async function formSend(e) {
        e.preventDefault();
        const error = formValidate(form);
        const formData = new FormData(form);
        const bodyPopup = document.querySelector('.js-modal-container');
        if (error === 0) {
            bodyPopup.classList.add('_sending')
            let response = await fetch('sendmail.php', {
               method: 'POST',
               body: formData
            })
            if (response.ok) {
                const result = await response.json()
                alert(result.message);
                form.reset();
                bodyPopup.classList.remove('_sending');
            } else {
                alert('Ошибка!')
                bodyPopup.classList.remove('_sending');
            }
        } else {
            alert('Заполните поля');
        }
    }
    function formValidate(form) {
        let error = 0;
        let formReq = document.querySelectorAll('._reg')
        console.log(form);
        for (let index = 0; index < formReq.length; index++) {
            const input = formReq[index];
            formRemoveError(input);
            if (input.classList.contains('_email')) {
                if (emailTest(input)) {
                    formAddError(input);
                    error++;
                }
            } else if (input.getAttribute('type') === 'checkbox' && input.checked === false) {
                formAddError(input);
                error++;
            } else {
                if (input.value === '') {
                    formAddError(input);
                    error++;
                }
            }
        }
        return error;
    }
    function formAddError(input) {
        input.parentElement.classList.add('_error');
        input.classList.add('_error');
    }
    function formRemoveError(input) {
        input.parentElement.classList.remove('_error');
        input.classList.remove('_error');
    }
    //Тест email
    function emailTest(input) {
        return !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,8})+$/.test(input.value);
    }
})

Заранее спасибо.

Answer 1

Если скрипт должен возвращать json, он не должен выводить ничего больше, ни echo, ни Location: xxx

//Отправляем
$response = ['message' => $message];
if (!$mail->send()) {
    $response['error'] = 'Email sending error';
}

header('Content-type: application/json');
echo json_encode($response);
READ ALSO
Кроссбраузерность с textarea

Кроссбраузерность с textarea

Здравствуйте господа и дамыУ меня есть вопрос касательно тега teaxtarea и фреймворка bootstrap 4

143
Как при авторизации профиля менять элементы меню шапки?

Как при авторизации профиля менять элементы меню шапки?

С помощью базы данных на firebase создала авторизациюКак при входе или выходе из аккаунта менять элементы меню? Надо чтобы стандартно стояло...

172
Обводка текста на чистом СSS

Обводка текста на чистом СSS

Хочу сделать обводку текста как на макете, но никак не выходитВот как должно быть:

236
На мобильном устройстве код не работает

На мобильном устройстве код не работает

почему этот кусок кода не работает на мобильных устройствахДаже когда захожу через консоль в мобильный режим всё срабатывает, а на телефоне...

181