Ошибка «Нет транспорта» при отправке html контактной формы в php скрипт на том же сервере - PullRequest
0 голосов
/ 12 февраля 2019

Я использую простую html форму контакта для отправки контактной информации в файл php с помощью Ajax / jQuery (v 1.10.2).PHP отправляет электронное письмо и возвращает сообщение об ошибке или «ОК» в случае успеха.Однако я получаю сообщение об ошибке «Нет транспорта», когда нажимаю кнопку «Отправить», а форма не отправляется.

У меня есть элемент формы html с идентификатором, и я использую «$ ('#contactForm '). отправить "в jQuery, чтобы отправить форму.Странно то, что он работал, возможно, 3 или 4 раза за последние несколько дней, поэтому он работает случайным образом время от времени.Я попытался не использовать jQuery и добавить метод действия непосредственно к элементу формы (форма action = "inc / sendEmail.php" method = "post"), и это работает, однако веб-страница затем перенаправляет в файл php, но я хочуоставайтесь на html-странице и не перенаправляйте.
- Я искал ajax и ошибку «без транспорта», и в большинстве ответов упоминается CORS, но мой js просто вызывает скрипт php на том же сервере, поэтому он не может бытьчто-нибудь связанное с CORS (не так ли?)
- Это работало несколько месяцев назад, но я недавно добавил SSL в домен, но опять-таки не вижу, как это может изменить ситуацию, как html, js иВсе php находятся на одном сервере.

<form id="contactForm">
    <div class="col-md-6">
    <div class="form-group">
            <label for="InputName">Your Name</label>
            <div class="input-group">
                <input type="text" class="form-control" name="InputName" id="InputName" placeholder="Enter Name" required>
                <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span>
            </div>
        </div>

        <div class="form-group">
            <label for="InputEmail">Your Email</label>
            <div class="input-group">
                <input type="email" class="form-control" id="InputEmail" name="InputEmail" placeholder="Enter Email" required  >
                <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span>
            </div>
        </div>

        <div class="form-group">
            <label for="InputMessage">Message</label>
            <div class="input-group">
                <textarea name="InputMessage" id="InputMessage" class="form-control"  placeholder="Enter Email" rows="5" required></textarea>
                <span class="input-group-addon"><i class="glyphicon glyphicon-ok form-control-feedback"></i></span>
            </div>
        </div>

        <input name="submit" type="submit" value="Submit" class="btn">
    </div>
</form>

$('#contactForm').submit(function(e) {
    e.preventDefault();

    var contactName = $('#contactForm #InputName').val();
    var contactEmail = $('#contactForm #InputEmail').val();
    var contactSubject = '';
    var contactMessage = $('#contactForm #InputMessage').val();
    var data = 'contactName=' + contactName + '&contactEmail=' + contactEmail +
    '&contactSubject=' + contactSubject + '&contactMessage=' + contactMessage;

    $.ajax({
        type: "POST",
        url: "inc/sendEmail.php",
        data: data,
        async: false,     
        success: function(msg) {
            // Message was sent
            if (msg == 'OK') {
                $('#message-warning').hide();
                $('#contactForm').fadeOut();
                $('#message-success').fadeIn();   
            }
            // There was an error
            else {
                $('#message-warning').html(msg);
            }
        },
        error: function (xhr, desc, err)
        {
            // GETTING "No Transport" ERROR HERE
            $('#message-warning').html('Error message: ' + err);
            $('#message-warning').fadeIn();
        }
    });

    return false;
});

<?php

$siteOwnersEmail = 'abc@xyz.com';

if($_POST) {

    $name = trim(stripslashes($_POST['contactName']));
    $email = trim(stripslashes($_POST['contactEmail']));
    $subject = trim(stripslashes($_POST['contactSubject']));
    $contact_message = trim(stripslashes($_POST['contactMessage']));

    // Check Name
    if (strlen($name) < 2) {
        $error['name'] = "Please enter your name.";
    }
    // Check Email
    if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
        $error['email'] = "Please enter a valid email address.";
    }
    // Check Message
    if (strlen($contact_message) < 15) {
        $error['message'] = "Please enter your message. It should have at least 15 characters.";
    }
    // Subject
    if ($subject == '') { $subject = "Contact form submission"; }

    // Set Message
    $message .= "Email from: " . $name . "<br />";
    $message .= "Email address: " . $email . "<br />";
    $message .= "Message: <br />";
    $message .= $contact_message;
    $message .= "<br /> ----- <br /> This email was sent from your site's contact form. <br />";

    // Set From: header
    $from =  $name . " <" . $email . ">";

    // Email Headers
    $headers = "From: " . $from . "\r\n";
    $headers .= "Reply-To: ". $email . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

    if (!$error) {

        ini_set("sendmail_from", $siteOwnersEmail); // for windows server
        $mail = mail($siteOwnersEmail, $subject, $message, $headers);

        if ($mail) { echo "OK"; }
        else { echo "Something went wrong. Please try again."; }

    } # end if - no validation error
    else {

        $response = (isset($error['name'])) ? $error['name'] . "<br /> \n" : null;
        $response .= (isset($error['email'])) ? $error['email'] . "<br /> \n" : null;
        $response .= (isset($error['message'])) ? $error['message'] . "<br />" : null;

        echo $response;
    } # end if - there was a validation error
}   
?>

Я ожидаю, что форма будет отправлена ​​в скрипт php, когда поля ввода верны, затем контактФорма должна быть скрыта, если с php возвращается сообщение OK.Однако я получаю сообщение об ошибке «Нет транспорта», когда нажимаю кнопку «Отправить», а форма вообще не отправляется (в панели инструментов браузера отсутствует запись на панели «Сеть»).

1 Ответ

0 голосов
/ 13 февраля 2019

Хорошо, думаю, я понял это.Похоже, что возникла проблема с отправкой ajax в файл php через SSL - даже если путь к файлу php является относительным, а сайт уже находится на https.Я читал, что более старая версия библиотеки jquery может иметь эту проблему, поэтому я обновил ее до более высокой версии (с 1.10.2 до 1.11.3), которая, похоже, устранила проблему.Требуется дополнительное тестирование, но пока все выглядит хорошо.

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