我正在通过一个具有以下功能的按钮向我的PHP文件发送POST请求:
function buttonFunction() {
$.post("http://ipaddress/core/file.php",{username:username, password:pword, coins:coins}, function(data) {
// Stuff
});
}
但是,我最近发现,如果文件进程/ PHP脚本仍在运行(尝试获取结果数据/响应),并且用户刷新页面,则PHP进程仍将在服务器上运行。此外,如果用户随后决定再次单击该按钮(刷新后),则会在服务器上从同一用户运行两个PHP进程(即,如果第一个仍在运行):
Javascript Abort POST Request on Retry/Refresh (HIGH CPU Usage)
但是,我遇到了使用Javascript发送带有XMLHttpRequest
的POST数据:
Send POST data using XMLHttpRequest
因此,假设我以这种方式发送POST请求,是否可以安全地说当用户刷新/关闭页面时,PHP执行结束了?
function buttonFunction() {
var http = new XMLHttpRequest();
var url = "get_data.php";
var params = "lorem=ipsum&name=binny";
http.open("POST", url, true);
//Send the proper header information along with the request
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.setRequestHeader("Content-length", params.length);
http.setRequestHeader("Connection", "close");
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(params);
}
但是,如果这也不起作用,我该如何解决此问题(来自同一用户的多个脚本在后台运行)?无论是在PHP文件中还是在JavaScript本身中,都可以获得任何帮助。
修改1:
可能的解决方案?
如果我使用XMLHttpRequest
并在页面卸载之前中止请求该怎么办?
window.onbeforeunload = function(event) {
http.abort();
};