Как уже говорилось в комментариях, ваш PHP повторяет 2 вещи:
echo json_encode($response_array);
// ...
echo $message;
Таким образом, этот скрипт возвращает две строки, связанные друг с другом - что объясняет странный вид nullsuccess
, который вы видите. Избавьтесь от первого echo
, чтобы вы возвращали только одно простое текстовое слово состояния.
Следующая проблема в вашем Javascript. Вы указали, что ваш AJAX-вызов вернет некоторый текст:
dataType: "text",
А на самом деле это так - текстовое сообщение success
, или failure
. Но когда дело доходит до использования этого ответа, ваш код воспринимает его как JSON:
if(data.result == 'success'){
data
- это ваш текстовый ответ / сообщение о состоянии, у него нет свойства .result
. Это просто текст, поэтому измените его на:
if(data === 'success'){
Обновление
Вот упрощенная, рабочая версия вашего кода. Я настроил это локально и убедился, что это работает. То, что я сделал only , - это то, что я описал выше - чтобы убедиться, что dataType
соответствует тому, что возвращает PHP, и чтобы JS обрабатывал его таким образом, когда он его получает. В этом случае это text
полностью.
Скопируйте этот код и попробуйте. Введите "a@a.com" в поле своей электронной почты, чтобы проверить ответ об успешном завершении, и все остальное, чтобы проверить отказ.
Javascript
$("#mc-embedded-subscribe-form").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "update-member.php",
data: $("#mc-embedded-subscribe-form").serialize(),
dataType: "text", // <-- WE EXPECT TO GET TEXT BACK
success: function(data) {
// Check what your PHP returns, make sure no newlines
console.log(data);
if (data === 'success') { // <-- TREAT WHAT WE GOT AS TEXT
window.location.href = 'https://google.com';
} else {
alert("Error");
}
}
});
});
PHP
<?php
// The problems you are having are unrelated to the Mailchimp processing,
// so let's simplify it to get the JS side working. Make sure you have
// no blank lines before or after your opening/closing PHP tags, as
// they will show up in the output, and your JS would then see something
// like "\nsuccess" for example. Also make sure nothing else in your PHP
// generates any output.
// WE RETURN TEXT
echo ($_POST['email_address'] === 'a@a.com') ? 'success' : 'failure';
?>
Если вы попробуете это, и это не сработает, у вас возникнет другая проблема. Откройте инструменты разработчика вашего браузера и проверьте консоль. Посмотрите на сетевые запросы и просмотрите ПОЧТУ.
Чтобы ответить на некоторые ваши комментарии:
Вы слишком усложняете вещи, настраивая случайные не связанные части проблемы. В этой конкретной проблеме есть только несколько оставшихся частей, которые нужно выровнять (у вас уже работают другие части):
1) Если вы сообщаете JS, что ваш PHP собирается возвращать текст, он должен возвращать текст.
2) Если вы сообщаете своему JS, что ваш PHP собирается возвращать текст, ваш JS должен затем обработать то, что ваш PHP возвращает как текст.
Вот и все. На самом деле больше ничего нет.
GET против POST: Соглашение и стандарты должны использовать GET для извлечения и просмотра данных, а также POST для изменения данных. Вы подписываете адрес электронной почты - это изменение , и вы должны использовать POST.
GET или POST не будут иметь никакого, нулевого, нулевого влияния на то, что возвращает ваш PHP, работает ли он нормально, или что dataType
вы должны использовать. Это не связанные части головоломки (хотя это не значит, что не имеет значения, что вы используете).