Мне нужно отправить информацию о кликах на моем веб-сайте на сторонний сервер с помощью 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
},
});
}
Какие-либо предложения?
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 }
Другими словами, вы пытаетесь делать две вещи одновременно:
<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 за вас, это, скорее, побеждает модель. Если я ухожу со страницы (или закрываю вкладку), я не хочу, чтобы браузер продолжал разговаривать с сервером от моего имени ...
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.