javascript — Ajax не получает ответ от моего & quot; рабочего PHP-скрипта & quot;

В настоящее время я делаю страницу контактов, используя смесь Ajax, PHP и MySQL.
Несколько быстрых заметок:

  • Весь код PHP и AJAX работает. Единственное, что я не могу заставить работать — это ответ от PHP на AJAX.

  • Эта страница контактов была оптимизирована таким образом, чтобы в случае отключения JavaScript в браузере. Страница будет использовать простой метод POST для завершения действия.

  • У меня есть несколько пользовательских функций (например, n ()), которые были объявлены ранее в файлах, из которых я предоставляю клипы. Пожалуйста, не обращайте на них внимания, так как они не влияют на проблему.

Разбивка каждого файла может быть найдена под каждым блоком кода.
contact_page.php (где происходит волшебство)

header('Content-type: application/json');
if(isset($_POST['l'])) {
if($_POST['l'] == 'php') { //This is related to the PHP version of the form validation. The code that handles the AJAX is farther down
$fd = $_POST['fd'];
$i = 0;
while ($i < count($fd)) { //Used to make sure all fields have been filled. Otherwise, return null.
$fd[$i] = n($fd[$i],false);
if(empty($fd[$i])) { $fd[$i] = null; }
$i++;
}

if(isset($fd[0],$fd[1],$fd[2],$fd[3])) {
if(filter_var($fd[1], FILTER_VALIDATE_EMAIL) && strlen($fd[1]) > 6) {
$q1 = "INSERT INTO contact_msg VALUES ('".$fd[0]."','".$fd[1]."','".$fd[2]."','".$fd[3]."',NOW(),'$date-$id');";
$r1 = mysqli_query($dbc1,$q1);
if($r1) {
$h = 'From: Jewl Photography Notifications <contact@jewl-photography.net>' . "\r\n" .
'MIME-Version: 1.0' . "\r\n" .
'Content-type: text/html; charset=utf-8' . "\r\n" .
'Reply-To: contact@jewl-photography.net' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

$m = m($fd[0],$fd[2],$fd[3],"$date-$id");
mail('nathan@lmartin.net','New Message From: '.$fd[0],$m,$h);
header('Location: https://jewl-photography.net/Contact?w=SNT');
} else {
header('Location: https://jewl-photography.net/Contact?w=INT_ERR');
}
} else {
header('Location: https://jewl-photography.net/Contact?w=FLS_EMAIL');
}
} else {
header('Location: https://jewl-photography.net/Contact?w=MISS_ALL');
}
}

//Below is the code that handles the AJAX

if($_POST['l'] == 'ajax') {
if(isset($_POST['name'],$_POST['email'],$_POST['subject'],$_POST['message'])) {
$fd = array(n($_POST['name'],true),
n($_POST['email'],false),
n($_POST['subject'],false),
n($_POST['message'],false));

if(filter_var($fd[1], FILTER_VALIDATE_EMAIL)) {
$q1 = "INSERT INTO example_table VALUES ('".$fd[0]."','".$fd[1]."','".$fd[2]."','".$fd[3]."',NOW(),'$date-$id');";
$r1 = mysqli_query($dbc1,$q1);
if($r1) {
echo json_encode('SENT');
$h = '
**Header Info**
';
$m = m($fd[0],$fd[2],$fd[3],"$date-$id");
mail('example@example.net','New Message From: '.$fd[0],$m,$h);
} else {
echo json_encode('ERROR_ADD');
}
} else { echo json_encode('FALSE_EMAIL'); }
} else { echo json_encode('NOT_ALL'); }
}
}

Contact_page.php довольно прост.

  1. Он берет информацию POST от Ajax (показано ниже).

  2. Запускает его через несколько функций кодирования (например, htmlspecialchars () и т.п., представленных n ()).

  3. Также тесты на соответствие определенным требованиям. Если нет, он должен отправить ответ обратно в AJAX (см. Шаг 6)

  4. Добавляет его в таблицу SQL.

  5. Отправляет электронное письмо модератору, чтобы сообщить им, что новое сообщение было отправлено.

  6. Затем отправьте ответ обратно на страницу контактов, используя объект json: echo json_encode («Текст ответа здесь»);

Все работает, кроме шага 6. По какой-то причине AJAX отказывается получать ответ. Я не получаю никаких ошибок или предупреждений по PHP, SQL или JavaScript, и мой Ajax (как вы увидите ниже) использует dataType JSON.

Contact.php (страница контактов на стороне пользователя)

            <script>
//This first half isn't ajax, skip down a few lines
//The very bottom of tis block of code is the form's html
$(function() {

$('#fglk').submit(function() {
var e = [];
e[0] = $('#name').val();
e[1] = $('#emal').val();
e[2] = $('#subj').val();
e[3] = $('#mesg').val();


if(e[1].length > 6 && e[1].length < 255) {
$('.err-span').removeClass('error');
$('.err-span').html('');
} else {
$('.err-span').addClass('error');
$('.err-span').html('Provide valid Email!');
e[1] = null;
}

/**AJAX Related code \/ **/
if(e[0] && e[1] && e[2] && e[3]) {
var data = new Object();
data.l       = 'ajax';
data.name    = e[0];
data.email   = e[1];
data.subject = e[2];
data.message = e[3];

var options = new Object();
options.data = data;
options.dataType = 'json';
options.type = 'post';
options.success = function (response) {
if(response == 'SENT') {
$('.err-span').html('Sent!');
$('.err-span').addClass('sent');
$('.err-span').addClass('error');

} else if(response == 'ERROR_ADD') {
$('.err-span').html('An internal error prevented your message from being sent!');
$('.err-span').addClass('error');

} else if(response == 'NOT_ALL') {
$('.err-span').html('Please fill out all fields!');
$('.err-span').addClass('error');

} else if(response == 'FALSE_EMAIL') {
$('.err-span').html('You must provide a valid email!');
$('.err-span').addClass('error');
}
};
options.url = 'https://example.net/php/contact_page.php';

$.ajax(options);
} else {
}
return false;
});

});
</script>
<p style='color: red;'>
<? //These $_GET parameters are for if raw PHP is used to send the message
if($_GET['w'] == 'INT_ERR') {
echo '**Some Text**';
}
if($_GET['w'] == 'FLS_EMAIL') {
echo '**Some Text**';
}
if($_GET['w'] == 'MISS_ALL') {
echo '**Some Text**';
}
if($_GET['w'] == 'SNT') {
echo '**Some Text**';
}
?>
</p>
<form action='https://example.net/php/contact_page.php?l=php' id='fglk' method='post'>
<label>Full Name:</label><br><input type='text'  id='name' name='fd[]' required><br>
<label>Email:</label><br><input type='email' id='emal' name='fd[]' required><br>
<label>Subject:</label><br><input type='text'  id='subj' name='fd[]'><br>
<label>Message:</label><br><textarea           id='mesg' name='fd[]' required></textarea><br>
<span class='err-span'></span>
<input type='submit' name='fd[]' value='Send'>
</form>

Contact.php довольно понятен.

  1. Он берет информацию из формы.

  2. Запускает электронную почту через базовую проверку электронной почты

  3. Передает это нескольким объектам JSON.

  4. Запускает эти объекты через функцию $ .ajax ().

  5. Выдает вернуть ложь; чтобы форма не отправляла и не перезагружала страницу.

  6. После запуска PHP AJAX должен принять ответ и отправить сообщение, написанное соответствующим образом.

Это не выдает никаких ошибок в моей консоли. Будет показано сообщение об ошибке, если я предоставлю электронное письмо длиной не более 6 символов (хотя это вообще не связано с кодом PHP). Но не будет показывать ни одного из ответов.

Ранее я использовал тот же код AJAX, и он работал нормально, главное отличие — это бэкэнд PHP.

Если у вас есть какие-либо вопросы по поводу кода, пожалуйста, дайте мне знать!

Спасибо за вашу помощь!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector