我正在编写一个小脚本来捕获链接点击,并将链接的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(); }
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进行进一步阅读。