一尘不染

AJAX帖子被重定向取消

ajax

我正在编写一个小脚本来捕获链接点击,并将链接的URL保存到数据库表中,以便跟踪在特定页面上每个链接被点击了多少次。链接是指向外部站点的。

因此,我在JavaScript函数中捕获了click事件,使用jQuery发布到将数据保存在MySQL中的PHP页面,然后JavaScript函数将用户重定向到他们单击的链接的URL。

我遇到的问题是,由于重定向的原因,该帖子似乎从未完成。我已经通过在post回调内部调用redirect来解决此问题,但是这增加了几秒钟的延迟,因为直到发布完成后才被调用。我正在寻找一种仅发布数据并立即重定向用户的方法,而无论发布成功与否。

这是具有解决方法的当前代码。它工作正常,但增加了延迟:

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(); 
}

这就是我想做的,但是当我尝试时,它永远不会完成:

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(); 
}

阅读 252

收藏
2020-07-26

共1个答案

一尘不染

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.

您正在寻找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'));

https://developer.mozilla.org/zh-
CN/XMLHttpRequest进行进一步阅读。

2020-07-26