AJAXpost被重定向取消

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

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

我遇到的问题是,由于重定向,似乎post永远不会完成。 我通过调用post回调中的重定向来解决这个问题,但是这会增加几秒延迟,因为直到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(); } 

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

 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/en/XMLHttpRequest进一步阅读。

当你要以任何方式加载页面时,为什么要使用Javascript发布?

只需在新页面上单击链接即可更新数据库。

也许使用引荐来源url来跟踪点击的页面。

或者其他一些解决方案来获取点击的页面(例如url param)或其他方式。

当您离开页面时,所有待处理的请求都将被终止,并且新页面将被加载。 第一种方式是正确的方法。 是的,单击链接会有延迟,这是因为POST请求正在运行。

如果用户不在该页面上,则无法在页面背景中运行请求。

也许您可以将链接URL保存在cookie中,并在下一页加载时将其放入数据库中。