AJAX帖子被重定向取消

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)

Rob*_*ert 7

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进一步阅读.