изменение window.location приводит вызов Ajax к сбою

У меня есть щелчок, отслеживающий функцию Ajax (называет a WebMethod на .aspx страница), и я должен назвать его, когда пользователь нажимает до ссылки.

К сожалению, я использую window.location = "newUrl" изменить страницу, которая, кажется, делает сбой вызова Ajax. Существует ли путь вокруг этого?

Я не должен возвращать информацию от вызова Ajax, я просто должен удостовериться WebMethod назван.

Я знаю, что мог просто перенаправить на success() или failure() вызовы, но затем я должен был бы ожидать clickTracking() метод для выполнения, который берет ~ 1s. Это не приемлемо по соглашению в спецификации проекта и так не является эффективным решением.

6
задан George Stocker 12 February 2010 в 15:52
поделиться

3 ответа

Вместо использования 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 , который перенаправляет вас на конечный сайт после отслеживания клика.

3
ответ дан 17 December 2019 в 04:46
поделиться

Мне просто нужно убедиться, что WebMethod {{ 1}} называется.

Если это действительно важно, вы можете сделать следующее:

function onLinkClicked() {
    $.ajax({
        url: 'WebMethod.aspx',
        success: function(data) {
            window.location = "newUrl";
        }
    });
}

Будет некоторая задержка с момента перенаправления страницы. Это может быть приемлемым или неприемлемым, в зависимости от вашего приложения и средней задержки между вашими пользователями и вашим хостом.


РЕДАКТИРОВАТЬ:

В дополнение к новому комментарию ниже, к сожалению, изменение window.location прервет ваш запрос AJAX.

Для внутренних ссылок: Вы можете отслеживать свои ссылки, как только пользователи попадают на новую страницу, а не когда они нажимают на гиперссылку.

Для внешних ссылок: Я бы использовал метод перенаправления на стороне сервера, как Энди Э. предложил в другом ответе .

2
ответ дан 17 December 2019 в 04:46
поделиться

Используйте оболочку