Ian*_*unn 6 javascript ajax jquery
我正在编写一个小脚本来捕获链接点击并将链接的URL保存到数据库表中,以便跟踪单击特定页面上每个链接的次数.链接指向外部站点.
因此,我在JavaScript函数中捕获click事件,使用jQuery发布到保存MySQL中数据的PHP页面,然后JavaScript函数将用户重定向到他们单击的链接的URL.
我遇到的问题是,由于重定向,似乎帖子永远不会完成.我通过在post回调中调用重定向来解决这个问题,但是这会增加几秒延迟,因为直到post完成后才会调用它.我正在寻找一种方法来发布数据并立即重定向用户,无论帖子是成功还是失败.
这是具有变通方法的当前代码.它工作正常,但增加了延迟:
function trackClicks(event)
{
var clicked = $(this).attr('href');
$.post
(
$('#track-click-post-url').attr('value'),
{
action: 'track_landing_page_clicks',
clicked_url: clicked,
nonce: $('#track-click-nonce').attr('value')
},
function( response )
{
window.location = clicked;
}
);
event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的,但是当我尝试它时,它永远不会完成:
function trackClicks(event)
{
var clicked = $(this).attr('href');
$.post
(
$('#track-click-post-url').attr('value'),
{
action: 'track_landing_page_clicks',
clicked_url: clicked,
nonce: $('#track-click-nonce').attr('value')
}
);
window.location = clicked;
event.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
jQuery不会为您要查找的内容提供回调.以下是可用的就绪状态:
Value State Description
0 UNSENT open()has not been called yet.
1 OPENED send()has not been called yet.
2 HEADERS_RECEIVED send() has been called, and headers and status are available.
3 LOADING Downloading; responseText holds partial data.
4 DONE The operation is complete.
Run Code Online (Sandbox Code Playgroud)
你正在寻找readystate 2,因为这是你最早意识到服务器收到消息的事实.
这应该让你开始:
var xhr = new XMLHttpRequest();
xhr.open("POST", clicked);
xhr.onreadystatechange = function() {
if (xhr.readyState >= 2) window.location = clicked;
};
xhr.send($('#track-click-post-url').attr('value'));
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en/XMLHttpRequest进一步阅读.