У меня есть щелчок, отслеживающий функцию Ajax (называет a WebMethod
на .aspx
страница), и я должен назвать его, когда пользователь нажимает до ссылки.
К сожалению, я использую window.location = "newUrl"
изменить страницу, которая, кажется, делает сбой вызова Ajax. Существует ли путь вокруг этого?
Я не должен возвращать информацию от вызова Ajax, я просто должен удостовериться WebMethod
назван.
Я знаю, что мог просто перенаправить на success()
или failure()
вызовы, но затем я должен был бы ожидать clickTracking()
метод для выполнения, который берет ~ 1s
. Это не приемлемо по соглашению в спецификации проекта и так не является эффективным решением.
Вместо использования AJAX, почему бы вам просто не отправить пользователя на страницу ASPX, которая записывает щелчок, а затем отправляет заголовок location
для перенаправления на новый URL-адрес? Например, при щелчке по ссылке произойдет следующее:
window.location = "/redirect.aspx?track=true&url=" + encodeURIComponent(newUrl);
redirect.aspx
будет обрабатывать как отслеживание, так и перенаправление на новый URL. Это практически единственный способ сделать это, не дожидаясь завершения запроса AJAX, прежде чем отправлять пользователя в путь.
См. Также: Перенаправление пользователей на другую страницу (MSDN)
Вероятно, стоит отметить, что вы видите этот метод каждый день на многих сайтах. Чаще всего они встречаются в рекламе. Рекламная ссылка AdSense выглядит так:
http://www.google.com/aclk
?sa=L&ai=C6DnFKnl1S5zhKoSBjAeqyKzKBPOD_2ehlIXfD9WsvQsQAVDQzK______
8BYLvOuYPQCsgBAaoEGU_Q8k4OJin9jMDXAD6KQ_2Dsv7xyokLxRY
&num=1&ggladgrp=13269254452699041863&gglcreat=8511532373602616220
&sig=AGiWqtwzFm2sTimBuQpkD5kazyRNkkqH3w
&q=http://www.amazon.co.uk/s/%3Fie%3DUTF8%26keywords%3Dhello%2Bworld
в любом случае (я ее немного сбил). Когда вы нажимаете на нее, вы попадаете на http://www.google.com/aclk , который перенаправляет вас на конечный сайт после отслеживания клика.
Мне просто нужно убедиться, что WebMethod {{ 1}} называется.
Если это действительно важно, вы можете сделать следующее:
function onLinkClicked() {
$.ajax({
url: 'WebMethod.aspx',
success: function(data) {
window.location = "newUrl";
}
});
}
Будет некоторая задержка с момента перенаправления страницы. Это может быть приемлемым или неприемлемым, в зависимости от вашего приложения и средней задержки между вашими пользователями и вашим хостом.
РЕДАКТИРОВАТЬ:
В дополнение к новому комментарию ниже, к сожалению, изменение window.location
прервет ваш запрос AJAX.
Для внутренних ссылок: Вы можете отслеживать свои ссылки, как только пользователи попадают на новую страницу, а не когда они нажимают на гиперссылку.
Для внешних ссылок: Я бы использовал метод перенаправления на стороне сервера, как Энди Э. предложил в другом ответе .
Используйте оболочку
, чтобы обернуть ваши страницы. Затем, когда у вас есть запрос AJAX, передайте его оболочке и перейдите по
. Это даст вам возможность иметь абсолютно асинхронный запрос, сохраняя при этом отзывчивость приложения.
Конечно, вы также не меняете адресную строку и эффективно не убиваете своего SEO, но это компромисс из-за плохой архитектуры. Тот факт, что ваша функция отслеживания кликов занимает около секунды, просто ужасает. Возможно, вам следует запустить его в асинхронном потоке на сервере и просто передавать данные клиенту в отдельном потоке ( System.Threading
). Это облегчило бы проблемы, с которыми вы столкнулись.
В противном случае вы можете иметь асинхронный , надежный или «не взломанный вместе» . Выберите любые два.
РЕДАКТИРОВАТЬ
Плохо, вы также можете запустить свой AJAX-запрос как всплывающее окно:
window.open(url,'ajax','height=0,width=0');
Это все еще не очень хорошая идея, но это сработает.