I have a web page say – sample-page.html
with 2 links in it –
sample-page.html
– link1 (GET, ajax)
– link 2 (GET, new page)
When I click link1
an ajax GET
request is executed and it still stays at the sample-page.html
.When I click link2
another get request is executed and a new page sample-page2
will appear.
To intercept both requests I’ve written a javascript code like this –
//attempt-1 : javascript
(function (send) {
XMLHttpRequest.prototype.send = function () {
this.setRequestHeader('some-header-param', 'some-value');
send.apply(this, arguments);
};
})(XMLHttpRequest.prototype.send);
//attempt-2: jquery
/*$.ajaxSetup({
beforeSend: function (xhr,settings) {
xhr.setRequestHeader('some-header', 'some-header-value');
}
}); */
The above, both attempts successfully able to intercept the ajax GET request from link1
.
But neither of the above code snippets can’t able to intercept the request from link2
. Can anyone help how to intercept both requests?
Thanks in advance.
4
Answers
When doing an AJAX call, you’re in complete control of the request. But when you click a link that goes to another URL entirely, there is not much you can do. You might want to look into the
beforeunload
event. With that event, you can cancel it in order to show a popup dialog asking if the user wants to navigate away or not.You can do that by using javascript event.preventDefault() functionality.
Write a event listener for onclick on that element. Do whatever functionality you want and call event.preventDefault() if you want stop sending the request otherwise leave it as it is.
you add custome attribute to the a tags that you want to intercept (eg: data-intercept)
Jquery
jquery will only intercept the a tag clicks that has attribute data-intercept =”true”
Basically, you have to either watch for a click event (preferably) on the link or monitor for unload event. A user clicking a html link has nothing to do with AJAX or Jquery except for the clicking part which is a DOM event. If you decide to use beforeunload, you have to return an undefined value to prevent a prompt.