Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Javascript 从替换内容中中止AJAX Post_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 从替换内容中中止AJAX Post

Javascript 从替换内容中中止AJAX Post,javascript,jquery,ajax,Javascript,Jquery,Ajax,目标: 完成:每5秒通过AJAX post刷新我页面上的一个div 不完整-当刷新的div上的下拉菜单打开时,停止刷新div。当刷新的div上的下拉菜单关闭时,开始刷新 在我当前的代码中,abort_refresh()函数似乎并没有中止ajax请求。有没有人知道如何让它工作 这是我目前拥有的java脚本代码: function refresh_recent() { var ajaxFn = $.ajax({ url : '<?php echo

目标:

完成:每5秒通过AJAX post刷新我页面上的一个div

不完整-当刷新的div上的下拉菜单打开时,停止刷新div。当刷新的div上的下拉菜单关闭时,开始刷新

在我当前的代码中,abort_refresh()函数似乎并没有中止ajax请求。有没有人知道如何让它工作

这是我目前拥有的java脚本代码:

    function refresh_recent() {
        var ajaxFn = $.ajax({
            url : '<?php echo site_url('/dashboard/recent'); ?>',
            type: "POST",
            cache: false,
            data : 'none',
            success: function(data, textStatus, jqXHR)
                {
                    $('#recent').html(data);
                    setTimeout(refresh_recent, 5000);
                }
            });
        return ajaxFn;
    }

    var refresh_object = refresh_recent();


    function abort_refresh() {
        refresh_object.abort();
    }

    function start_refresh() {
        refresh_object = refresh_recent()
    }
函数刷新\u最新(){
var ajaxFn=$.ajax({
url:“”,
类型:“POST”,
cache:false,
数据:“无”,
成功:函数(数据、文本状态、jqXHR)
{
$('#recent').html(数据);
setTimeout(刷新时间,5000);
}
});
返回ajaxFn;
}
var refresh_object=refresh_recent();
函数中止_刷新(){
刷新_object.abort();
}
函数启动\u刷新(){
刷新\u对象=刷新\u最近的()
}
“刷新内容”JavaScript和HTML

<script type="text/javascript">
    $('.refresh').on('shown.bs.dropdown', function () {
        abort_refresh();
    });

    $('.refresh').on('hide.bs.dropdown', function () {
        start_refresh();
    });
</script>    

    <div class="refresh btn-group">
        <button type="button" class="btn btn-xs btn-danger" data-toggle="modal" data-target="#view-modal" data-type="outbound" data-record="<?php echo $value['id'] ?>"><span class="glyphicon glyphicon-search"></span></button>
        <button type="button" class="btn btn-xs btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
          <span class="caret"></span>
          <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul class="dropdown-menu" role="menu">
          <li><a data-toggle="modal" data-target="#resend-modal" data-record="<?php echo $value['id'] ?>"><span class="glyphicon glyphicon-share-alt" aria-hidden="true"></span>Resend</a></li>
          <li class="divider"></li>
          <li><a data-toggle="modal" data-target="#delete-outbound-modal" data-record="<?php echo $value['id'] ?>"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span>Delete</a></li>
        </ul>
    </div>

$('.refresh').on('show.bs.dropdown',函数(){
中止刷新();
});
$('.refresh').on('hide.bs.dropdown',函数(){
开始刷新();
});

它失败是因为您没有更新保存Ajax请求的变量<代码>刷新对象
并不总是有最新的请求。另外,您需要取消超时

(function() {

    var refresh_object, timer;

    function refresh_recent() {

        if (refresh_object) return;

        var ajaxFn = $.ajax({
            url : '<?php echo site_url('/dashboard/recent'); ?>',
            type: "POST",
            cache: false,
            data : 'none',
            success: function(data, textStatus, jqXHR)
                {
                    $('#recent').html(data);
                    timer = setTimeout(refresh_recent, 5000);
                    refresh_object  = null;
                }
            });
        refresh_object = ajaxFn;
    }


    refresh_recent();


    function abort_refresh() {            
        if (refresh_object ) { 
            refresh_object.abort();
        }
        window.clearTimeout(timer);
        refresh_object = null;
    }

    function start_refresh() {
        refresh_recent()
    }

    $('.refresh')
        .on('shown.bs.dropdown', abort_refresh)
        .on('hide.bs.dropdown', start_refresh);

}());
(函数(){
变量刷新对象,定时器;
函数refresh_recent(){
如果(刷新对象)返回;
var ajaxFn=$.ajax({
url:“”,
类型:“POST”,
cache:false,
数据:“无”,
成功:函数(数据、文本状态、jqXHR)
{
$('#recent').html(数据);
定时器=设置超时(刷新时间,5000);
刷新对象=null;
}
});
刷新对象=ajaxFn;
}
刷新_recent();
函数中止_刷新(){
如果(刷新对象){
刷新_object.abort();
}
清除超时(计时器);
刷新对象=null;
}
函数启动\u刷新(){
最近更新
}
$(“.refresh”)
.on('显示.bs.下拉列表',中止刷新)
.on('hide.bs.dropdown',start\u refresh);
}());

您确实意识到,一旦点击setTimeout(刷新,5000);它将继续执行每5秒,即使你调用中止它?非常感谢你的回应,这澄清了我的困惑。当然,我现在唯一的问题似乎是,如果我在发布期间不单击下拉菜单,它似乎会创建另一个对象实例并开始双重发布。是否有其他东西触发了
刷新\u recent
?这很有魅力!谢谢你的耐心。