Перейти на страницу с помощью Javascript, не покидая текущую страницу

#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'); . Теперь это работает, спасибо!