Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 变量变为真时弹出警报_Php_Javascript_Ajax_Jquery - Fatal编程技术网

Php 变量变为真时弹出警报

Php 变量变为真时弹出警报,php,javascript,ajax,jquery,Php,Javascript,Ajax,Jquery,我使用ajax从php脚本接收一些变量。如果变量变为TRUE,我想运行JavaScript警报函数窗口。当用户确认警报时,我想将一个新值发送回另一个php,该php将更新sqlite中的一个表,报警函数将恢复正常 我的问题是,我使用setInterval每秒更新变量。这意味着我的警报窗口也会每秒弹出一次 有没有更好的办法 她是我的一些代码: <script type="text/javascript"> $.ajaxSetup({ cache: false }); setInte

我使用ajax从php脚本接收一些变量。如果变量变为TRUE,我想运行JavaScript警报函数窗口。当用户确认警报时,我想将一个新值发送回另一个php,该php将更新sqlite中的一个表,报警函数将恢复正常

我的问题是,我使用setInterval每秒更新变量。这意味着我的警报窗口也会每秒弹出一次

有没有更好的办法

她是我的一些代码:

<script type="text/javascript">

$.ajaxSetup({ cache: false });

setInterval(function(){

$.getJSON('statusdata.php',function(data) {

hops = data["add_hops"];

if (hops == 1)
{
add_hops();
}

});
}, 1000);

$.ajaxSetup({cache:false});
setInterval(函数(){
$.getJSON('statusdata.php',函数(数据){
跳数=数据[“添加跳数”];
如果(跳数==1)
{
添加_hops();
}
});
}, 1000);
以下是我的javascript:

<script type="text/javascript">

function add_hops()
{
startwindow=window.open("http://192.168.1.5/Birger/hops_alarm.html", "startwindow",         
"location=1,                          
status=0,scrollbars=0,width=750px,hight=350px");
startwindow.moveTo(640,300);
}   

</script>

函数add_hops()
{
startwindow=窗口。打开(“http://192.168.1.5/Birger/hops_alarm.html“,“startwindow”,
“位置=1,
状态=0,滚动条=0,宽度=750px,高度=350px“;
startwindow.moveTo(640300);
}   

JavaScript不授权
setInterval
本身正常工作。更不用说ajax了。ajax本质上是异步的。在ajax
success
上使用回调来确定是否显示弹出窗口

当您发出过多ajax请求时,浏览器会将其排队。所以他们不能保证在1秒内结束

编辑 从评论中可以看出:

在ajax调用中使用call可以确保在ajax调用终止之前不会调用add_hops函数


谢谢。

防止代码复制警报的最佳方法是将超时捕获到如下变量:

var myTimeout = setTimeout(function () {

    // …

}, 1000);
现在您有了超时的引用,您可以使用以下行取消它:

if (myTimeout) clearTimeout(myTimeout);
要在函数中实现这一点,需要将clearTimeout行插入匿名函数,如下所示:

var hops = null;
var myTimeout = setInterval(function(){

    if (hops == 1) {
        clearTimeout(myTimeout);
        return;
    }
    $.getJSON('statusdata.php',function(data) {
        hops = data["add_hops"];
        if (hops == 1) {
            add_hops();
        }
    });

}, 1000);
将clearTimeout()调用添加到匿名函数而不是$.getJSON()调用,可以防止代码在laggy连接上执行不必要的AJAX请求

参考资料


您是否考虑过使用WebSocket而不是ajax?您可以尝试使用弹出窗口而不是alert Box。我尝试过使用弹出窗口,但由于我使用的变量是函数中的本地变量,因此它会每隔一秒运行一次弹出窗口。如果我能得到variabel全局变量,我想我可以解决这个问题。?+1,在ajax调用中使用call可以确保在ajax调用终止之前不会调用add_hops函数