JS-код
Код: Выделить всё
document.addEventListener('DOMContentLoaded', function() {
var elements = document.querySelectorAll('.elementor-button-text');
elements.forEach(function(element) {
element.classList.add('cta');
});
function addEventListenersToButtons() {
const leadSourceButtons = document.querySelectorAll('.cta');
console.log('Lead Source Buttons:', leadSourceButtons);
if (leadSourceButtons.length > 0) {
leadSourceButtons.forEach(function (button) {
button.addEventListener('click', function (event) {
event.preventDefault();
const leadSource = button.className;
const leadCTA = button.textContent.trim();
sessionStorage.setItem('leadSource', leadSource);
sessionStorage.setItem('leadCTA', leadCTA);
console.log('Lead Source:', leadSource);
console.log('Lead CTA:', leadCTA);
const formUrl = button.getAttribute('data-form-url');
if (formUrl) {
setTimeout(() => {
window.location.href = formUrl;
}, 100);
} else {
console.error('No valid data-form-url found for this button.');
}
});
});
} else {
console.error('No elements found with class "cta"');
}
}
addEventListenersToButtons();
const leadSource = sessionStorage.getItem('leadSource');
const leadCTA = sessionStorage.getItem('leadCTA');
if (leadSource && leadCTA) {
console.log('Loaded Lead Source:', leadSource);
console.log('Loaded Lead CTA:', leadCTA);
} else {
console.error('No lead source or CTA found in sessionStorage');
}
const forms = document.querySelectorAll('.wpcf7');
forms.forEach(function (form) {
form.addEventListener('submit', function (event) {
event.preventDefault();
const formId = document.querySelector('[name="hidden-form-id"]').value || 'undefined';
const pageURL = window.location.href;
const URLParams = window.location.search;
const referrerURL = document.referrer;
const result = 'success';
const timestamp = new Date().toISOString();
const productTypeElement = document.querySelector('[product-type]');
const productVariantElement = document.querySelector('[product-variant]');
const currencyElement = document.querySelector('[currency]');
const priceElement = document.querySelector('[price]');
const productDetail = {
productType: productTypeElement ? productTypeElement.getAttribute('product-type') : 'undefined',
productVariant: productVariantElement ? productVariantElement.getAttribute('product-variant') : 'undefined',
currency: currencyElement ? currencyElement.getAttribute('currency') : 'undefined',
price: priceElement ? priceElement.getAttribute('price') : 'undefined',
productParameters: {}
};
const userData = {
name: 'undefined',
surname: 'undefined',
email: 'undefined',
phone: 'undefined',
zip: 'undefined'
};
const contactTime = {
callTime: 'undefined',
meetTime: 'undefined'
};
const eventDetails = {
leadSource: leadSource,
leadCTA: leadCTA,
formId,
pageURL,
URLParams,
referrerURL,
result,
timestamp,
productDetail,
userData,
contactTime
};
sessionStorage.setItem('eventDetails', JSON.stringify(eventDetails));
console.log('Event Details:', eventDetails);
const dataToSend = {
action: 'store_json_content',
eventDetails: eventDetails
};
console.log('Sending data with fetch:', JSON.stringify(dataToSend));
fetch('/wp-admin/admin-ajax.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8'
},
body: JSON.stringify(dataToSend)
})
.then(response => {
console.log('Fetch response status:', response.status);
console.log('Fetch response text:', response.statusText);
if (response.ok) {
console.log('Data sent successfully');
form.submit();
} else {
console.error('Error sending data:', response.status, response.statusText);
response.text().then(text => console.error('Response text:', text));
}
})
.catch(error => {
console.error('Request failed', error);
});
});
});
});
Код: Выделить всё
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
}
function store_json_content() {
error_log('AJAX Request Received');
$input = file_get_contents('php://input');
error_log('Raw input: ' . $input);
$decoded = json_decode($input, true);
if (json_last_error() === JSON_ERROR_NONE) {
error_log('Decoded JSON: ' . print_r($decoded, true));
if (isset($decoded['eventDetails'])) {
error_log('Received eventDetails: ' . print_r($decoded['eventDetails'], true));
set_transient('my_json_content', json_encode($decoded['eventDetails']), 30);
error_log('Data stored in transient: ' . json_encode($decoded['eventDetails']));
wp_send_json_success('Data received successfully.');
} else {
error_log('No event details found.');
wp_send_json_error('No event details found.');
}
} else {
error_log('JSON decode error: ' . json_last_error_msg());
wp_send_json_error('JSON decode error: ' . json_last_error_msg());
}
}
add_action('wp_ajax_store_json_content', 'store_json_content');
add_action('wp_ajax_nopriv_store_json_content', 'store_json_content');
Когда я отправляю запрос AJAX, ответ — 400 Bad Request.
Доступ https://xxxx.cz/wp-admin/admin-ajax.php напрямую возвращает 0, что, как я понимаю, нормально.
Отправка запроса cURL также возвращает 0.
Что я пробовал
Проверил, что admin-ajax.php доступен, и возвращает 0 при прямом доступе.
Убедился, что мое действие зарегистрировано правильно в коде PHP.
Добавлено подробное журналирование в функции PHP, чтобы увидеть, обрабатывается ли запрос, и проверить наличие ошибок декодирования JSON.
Почему запрос AJAX возвращает 400 Неправильный запрос?
Что мне не хватает в настройке или коде, что может вызвать эту проблему?
Будем очень признательны за любую помощь или подсказки. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/785 ... ad-request