#javascript
Вопрос:
У меня есть файл Javascript, запущенный на странице, и я хотел бы регистрировать определенные события по мере их возникновения. Например, у меня есть интернет-магазин, и когда люди добавляют товар в свою корзину, я хочу зарегистрировать это событие, посетив страницу, которую я создал:
function log_event(id) {
window.location.href = 'https://example.com/log/cart.php?id=' id;
return false;
}
На log/cart.php
странице действительно нечего отображать, все, что она делает, это вставляет запись в базу данных, содержащую товар, который был добавлен в корзину, и дату.
Код, вызывающий эту функцию, выглядит следующим образом:
document.getElementById('add-to-cart').addEventListener('click', function() {
// Add to the cart
...
// Track the item that was added
let id = document.getElementById('add-to-cart').getAttribute('data-id');
log_event(id);
});
С моим текущим кодом log/cart.php
фактически заменяет текущую страницу. Я хочу, чтобы открытие log/cart.php
происходило только в фоновом режиме без прерывания пользователя. Я не хочу, чтобы он фактически открывал вкладку или окно браузера и позволял пользователю оставаться на странице продукта.
Комментарии:
1. Вам не нужно посещать страницу. Просто вызовите собственный
fetch
запрос:fetch(`https://example.com/log/cart.php?id=${id}`)
Ответ №1:
Вы можете отправить запрос AJAX на эту конечную точку:
function log_event(id) {
var xhttp = new XMLHttpRequest();
xhttp.open("GET", 'https://example.com/log/cart.php?id=' id, true);
xhttp.send();
return false;
}
fetch()
также может использоваться, но имейте в виду его поддержку браузером (без IE).
Комментарии:
1. Я получаю:
Access to XMLHttpRequest at 'https://example.com/' from origin 'https://mystore.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
не уверен, должно ли это быть для другого вопроса или нет.2. @dokgu
https://example.com/
находится не в том же домене, что и ваш сайт, отсюда и ошибка.3. Есть ли способ это исправить? Я полагаю, что в нем указано
Access-Control-Allow-Origin
, что должно присутствоватьhttps://example.com/
правильно? Как мне это сделать?4. @dokgu Вы действительно собираетесь отправить запрос
example.com
? Не похоже, что этот сайт служит для ваших нужд. Вы должны изменить его на URL, на который вы хотите отправить запрос.5.
cart.php
Я добавил эту строку :header('Access-Control-Allow-Origin: https://mystore.com');
. Теперь это работает, спасибо!