我有一系列用户按顺序看到的表单。当用户提交表单时,它会提交一个PHP文件,该文件将根据提交的值执行一些繁重的工作,这可能需要10秒或更长时间才能运行,我不希望我的用户必须等待才能访问下一个表格。
由于我不需要等待PHP完成(我不需要其结果才能继续),是否可以将用户重定向到提交的下一页,并提交表单背景,所以它不会减慢用户的速度?
我听说Javascript setTimeout()可以模仿线程。这是一个让它并行运行的选项吗?
我的JS函数goNext()
将用户重定向到下一页(但不提交)。那会是这样的工作吗?
$('#submitButton').click(function() {
setTimeout(submitForm(), 1);
goNext();
});
function submitForm() {
$('#form').submit();
}
答案 0 :(得分:0)
每个HTTP请求都会收到响应。因此,为了告诉您的请求有效,您需要从服务器获得良好的响应(200)。
为了做你的建议,我认为你应该在服务器端处理这个问题。
答案 1 :(得分:0)
使用ajax异步处理表单。我知道像jQuery这样的库允许你有一个回调,当返回数据时会调用它。您也可以在没有库的情况下执行此操作,但只需简化库即可。
从他们的网站:
$.ajax({
url: 'ajax/test.html',
success: function(data) {
$('.result').html(data);
alert('Load was performed.');
}
});
(默认情况下,呼叫是异步的)
没有库,你可以这样做:
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert('Ajax returned';
}
}
xmlhttp.open("GET", "some_url.txt",true);
xmlhttp.send();
xmlhttp.onreadystatechange=
是您设置“回调”功能的地方,但是使用普通的javascript,您可能想要检查就绪状态是否实际上是成功就绪状态(如示例所示)。
答案 2 :(得分:0)
不,这不起作用。当用户离开页面时(例如,通过提交表单),javascript被终止,并且下一页面加载创建新的javascript上下文。您不能仅使用javascript将变量或计时器保留在请求上。
如果一切都发生在同一页面上,你可以使用ajax,使用ajax调用发送表单数据并等待处理完成,但是如果用户意外关闭页面或在ajax调用等待时导航,处理中止。
更好的解决方案是将服务器上的上传,处理和报告部分分开;这可能是这样的架构: