首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果进程仍在运行,则发出javascript警报

如果进程仍在运行,则发出javascript警报
EN

Stack Overflow用户
提问于 2015-10-14 08:45:02
回答 2查看 144关注 0票数 0

我想知道是否有可能创建一个javascript警报,将提示用户,有以前提交的表单,其仍在处理或后端脚本仍在运行。运行时过程通常需要2-5分钟。

下面的html代码摘录

代码语言:javascript
复制
            <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脚本。

代码语言:javascript
复制
function surveyFunction(){
var div = document.getElementById("list").value;
$.ajax({
    type: "POST",
    url: "possurv.pl",
    data: 'division=' + encodeURIComponent(div),
});
}

perl脚本反过来执行一个shell脚本,我在shell脚本上添加了一个.sem文件,以禁止执行多个实例。但是前端的用户没有办法知道这一点。

perl脚本摘录

代码语言:javascript
复制
$div = $FORM{division};

$expect = `./expect.sh $div`;

shell脚本摘录

代码语言:javascript
复制
sem="${log_path}/pos_survey.sem"

echo $0 "started."
if [ -e $sem ]
then
  echo $0 "still running, exiting."
  exit 1
else
  touch $sem
fi
EN

回答 2

Stack Overflow用户

发布于 2015-10-14 08:57:52

我不确定这是否是您想要的,但是为什么不在发送ajax查询之前设置一个变量,表明您正在处理,并在处理完成后更改该变量,并返回到ajax查询的成功函数。

代码语言:javascript
复制
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;
        }
    });
}
票数 0
EN

Stack Overflow用户

发布于 2015-10-14 09:12:01

jQuery Deferred或者我们叫Promise

deferred.always()

添加要在解析或拒绝延迟对象时调用的处理程序。

示例:

文档:和

代码语言:javascript
复制
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
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33114864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档