Я использую jQuery $ .ajax, чтобы опубликовать простую форму контакта в php-скрипте.Я пытаюсь оценить ответ и, основываясь на этом, либо заменить всю форму сообщением "спасибо", либо заполнить раздел "ошибкой" с проблемами.Обратный вызов успеха вызывается, поэтому (я думаю) ошибки нет, но данные все же пусты.
jQuery код:
$(document).ready(function() {
$("input[type='submit']").click(function(event) {
event.preventDefault();
var name = '#' + $(this).closest('form').attr('name');
$.ajax({
url: "ajax/index1.php",
type: "POST",
data: $(name).serialize(),
success: function(data) {
alert(data);
if (data == 'yes') {
$('#error').html(data);
} else {
$(name).html(data);
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
});
});
Я почти уверен, что функция успеха(не ошибка) работает, потому что я получаю предупреждение, даже если я удаляю функцию ошибки.Также, если я удалю эту строку предупреждений, я не получу никаких предупреждений.И содержимое формы заменяется пустым div, так что похоже, что он работает гладко.
Кроме того, если я заменю "alert (data)" на "alert ('hello')", который отображается.Таким образом, данные пусты!
Если я попытаюсь опубликовать форму напрямую (без jQuery), я получу ответ со страницы php - либо «Пожалуйста, введите ваше имя. Пожалуйста, введите свой адрес электронной почты. Пожалуйста, введите вашКомпания."Или «Спасибо! Ваше сообщение отправлено».
Все в одном домене.
Почему данные пусты?Последние 6 часов я просто не могу разобраться с этим.
Я не установил никаких глобальных настроек ajax.Перед публикацией здесь я также попробовал это с JSON, как предложено в одном из ответов и с тем же результатом - пустой ответ.Я также попробовал xml.
index1.php содержит тонну кода, связанного с другими формами на сайте.Суть этого:
if (!isset($_POST['submit'])) exit();
if (isset($_POST['submit'])) {
switch (basename($_SERVER['HTTP_REFERER'])) {
//define required fields, fields to e-mail in the form, success message, form div id...
}
}
if (is_array($required)) {
$errors = array();
foreach ($required as $req) {
$error = '';
if (empty($_POST[$req])) {
switch ($req) {
//adjust error message based on name of field...
default: $error = 'Please enter your ' . $req . '.';
}
$errors[] = $error;
}
}
}
if (empty($errors) && is_array($fields)) {
//decide to which e-mail address to send everything based on the form input
$headers = "From: ...";
$subject = "Inquiry";
$body = "The following information was submitted:\n\n";
foreach ($fields as $a => $b) {
if (is_array($_POST[$a])) {
$body .= sprintf("%s: %s\n", $b, stripslashes(implode(', ', $_POST[$a])));
} else {
$body .= sprintf("%s: %s\n", $b, stripslashes($_POST[$a]));
}
}
$send = mail($to, $subject, $body, $headers);
if (!$send) $msg = 'We encountered an error sending your message, please go back and try again. If the problem persists, please call us.';
}
$error = 'no';
if (is_array($msg)) {
$msg = implode(' ', $msg);
$error = 'yes';
}
header('Content-type: text/html');
echo $error . ' ' . $msg;
}
Я, очевидно, собираюсь изменить окончательный текст, отображаемый на что-то, что может быть реально проанализировано, но на данный момент я просто пытаюсь получить что-то, чтобы показать вобратный вызов успеха.
Одна мысль - может ли $ _SERVER ['HTTP_REFERER'] быть моей проблемой?Я переключаюсь с прототипа, и это не было проблемой, поэтому я принял это как должное здесь.Если да, есть ли способ идентифицировать страницу, с которой была отправлена форма?
[ОБНОВЛЕНИЕ] Попытка добавить сценарий «по умолчанию» в операторе переключателя $ _SERVER ['HTTP_REFERER'] безрезультатно, поэтому яЯ предполагаю, что это не проблема.