Удаленный Ajax-вызов в функции jQuery .click () не заканчивается до перехода на следующую страницу - PullRequest
3 голосов
/ 10 июня 2010

Мне нужно отправить информацию о кликах на моем веб-сайте стороннему серверу, используя ajax (json).Я использую jquery, и я добавил событие click для определенных ссылок.В событии click я делаю json-запрос к удаленному серверу с указанием местоположения щелчка (тепловой карты) и некоторой другой информации.Проблема в том, что функция ajax не срабатывает вовремя до того, как произойдет действие по умолчанию.Установка async в false, похоже, не работает при удаленных вызовах ajax.Я пробовал метод protectDefault (), но тогда я не знаю, как выполнить действие по умолчанию после успешного вызова 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
        },
    });
}

Есть предложения?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Да, вам придется

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

    $ ('a'). click (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
    }
    
0 голосов
/ 10 июня 2010

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

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

и

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

и хотите оставить HREFSOMETAG в случае, если у них отключен JavaScript?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...