Мне нужно отправить информацию о кликах на моем веб-сайте на сторонний сервер с помощью ajax (JSON). Я использую jQuery и добавляю событие щелчка к определенным ссылкам. В случае щелчка я отправляю JSON-запрос на удаленный сервер с указанием местоположения щелчка (тепловая карта) и некоторой другой информации.

Проблема в том, что функция ajax не срабатывает вовремя до того, как произойдет действие ссылки по умолчанию. Установка для async значения false, похоже, не работает с удаленными вызовами ajax. Я пробовал preventDefault(), но тогда я не знаю, как выполнить действие по умолчанию после успешного вызова ajax. Вот что я хочу сделать:

$('a').click(submit_click);
    
function submit_click(e,fireAjax){
    e.preventDefault();
    cd_$.ajax({
        url: jsonUrl, //remote server
        dataType: 'json',
        data: jsonData,
        async: false,
        success: function(reply){
            //Run the default action here if I have to disable the default action
        },
    });
}

Какие-либо предложения?

3
Clint 10 Июн 2010 в 19:20

2 ответа

Лучший ответ

Да, тебе придется

  • захватить значение href ссылки
  • верните false в вашей функции submit_click
  • измените URL-адрес страницы в вашей функции успеха на сохраненное значение href

    $ ('a'). нажмите (submit_click);

    function submit_click(e,fireAjax){
        e.preventDefault();
        var oldHref = $(this).attr('href'); // store the old url
        cd_$.ajax({
            url: jsonUrl, //remote server
            dataType: 'json',
            data: jsonData,
            async: false,
            success: function(reply){
                //Run the default action here if I have to disable the default action
                window.location.href = oldHref; // go to the new url
            },
        });
        return false; // don't actually go to the href
    }
    
1
Dan Heberden 10 Июн 2010 в 15:24

Другими словами, вы пытаетесь делать две вещи одновременно:

<a ID="SOMETAG" href="...">link</a>

А также

function onClick() {
    // Attached to "#SOMETAG" and does an AJAX call ...
}

И вы хотите оставить HREF для SOMETAG на случай, если у них отключен JavaScript?

Я думаю, что решение заключается в том, что когда вы подключаетесь к обработчику onclick, вы должны удалить href через javascript, а затем программно вызвать onSuccess href.

Поскольку я не вижу, где вы можете запустить в браузере новый процесс для завершения вызова AJAX за вас, это, скорее, побеждает модель. Если я ухожу со страницы (или закрываю вкладку), я не хочу, чтобы браузер продолжал разговаривать с сервером от моего имени ...

0
jcolebrand 10 Июн 2010 в 15:23