我想知道是否有可能创建一个javascript警报,提示用户提交了以前的表单并且仍在处理或后端脚本仍在运行。运行时过程通常需要2-5分钟。
下面的html代码摘录
<form id="form" method="POST">
<p id="survey">
<label for="list"><b>Run survey to check number of NGPOS deployed</b></label>
</p>
<p>
<label for="division">Please select division:</label>
<select type="list" id="list" name="division">
<option>--Select One--</option>
<option value="DENVER">Denver</option>
<option value="PHOENIX_SOUTHWEST">Phoenix-Southwest</option>
<option value="PORTLAND">Portland</option>
<option value="SOUTHERN_HOUSTON">Southern-Houston</option>
<option value="NORCAL">Norcal</option>
<option value="SEATTLE">Seattle</option>
<option value="VONS_SoCal">Vons-Socal</option>
<option value="EASTERN">Eastern</option>
</select>
</p>
<p id="survey">
<input type="submit" value="Run Survey" onclick="surveyFunction();"/>
</p>
</form>
javascript函数在后端调用perl脚本
function surveyFunction(){
var div = document.getElementById("list").value;
$.ajax({
type: "POST",
url: "possurv.pl",
data: 'division=' + encodeURIComponent(div),
});
}
perl脚本依次执行shell脚本,我在shell脚本上添加了一个.sem文件,禁止执行多个实例。但是前端的用户无法知道这一点。
perl脚本的摘录
$div = $FORM{division};
$expect = `./expect.sh $div`;
shell脚本的摘录
sem="${log_path}/pos_survey.sem"
echo $0 "started."
if [ -e $sem ]
then
echo $0 "still running, exiting."
exit 1
else
touch $sem
fi
答案 0 :(得分:0)
我不确定这是否是您的想法,但为什么不在发送ajax查询之前设置一个变量,表示您正在处理并在处理完成后更改变量并返回成功你的ajax查询的功能。
var processing = false;
function surveyFunction(){
if(processing) {
return alert('A survey is still being processed');
}
var div = document.getElementById("list").value;
$.ajax({
type: "POST",
url: "possurv.pl",
data: 'division=' + encodeURIComponent(div),
beforeSend: function () {
processing = true;
},
success: function() {
processing = false;
}
});
}
答案 1 :(得分:0)
jQuery Deferred
或者我们致电 Promise
:
<强> deferred.always()强>
添加要在解析或拒绝Deferred对象时调用的处理程序。
示例: JSFIDDLE
文件: Deferred Object 和 Promise
var lock = false;
function surveyFunction() {
if (lock) {
console.debug('please wait');
return false;
}
lock = true;
var div = document.getElementById("list").value;
return $.ajax({
type: "POST",
url: "possurv.pl",
data: 'division=' + encodeURIComponent(div)
}).always(function () {
console.debug('complete');
lock = false
});
}