当前位置: 首页 > 面试题库 >

中止AJAX发布

岑彬炳
2023-03-14
问题内容

我的设置是这样的(为清楚起见简化了):

<div class="methods">
    <a href="#a">Method 1</a>
    <a href="#b" class="fb_method">FB Method</a>
    <a href="#c">Method 3</a>
</div>

... <!-- contents -->

因此,每个方法(如果单击)都将淡入内联内容,但具有“ fb_method”类的锚点除外,因为它需要先执行AJAX请求,然后再附加到其内容容器中。

所以我的jQuery是这样的:

$('.methods a').click(function(){
    // do something global to the anchors, eg : change the bg color, etc
    // set the target container
    var target = $(this).attr('href');
    var xhr;

    //if user clicks fb_method buttons
    if($(this).hasClass('fb_method')){
        //do ajax request - NOTE 1
        xhr = $.post("/ajax/get_fb_albums.php",function(msg){                           
            $(target).html('').append(msg).fadeIn();
        });
    }else{
        //abort all ajax request
        xhr.abort();
        $(target).fadeIn();
    }
    return false;
});

所以我想要的是,当用户第一次单击fb_method按钮时,它将请求AJAX。但是,如果他们突然改变主意并单击其他方法,我想中止先前的AJAX请求。

我通过Firebug跟踪了它,并返回了xhr的错误,该错误未定义。如果我将xhr移到了if语句之前的NOTE
1中,它可以工作,但AJAX请求仍在处理中。当我单击FB方法然后单击其他方法时,我的意思是在Firebug中,它显示如下内容:

// ajax request xhr - keeps on loading
// ajax request xhr aborted

但是请求继续加载。


问题答案:

您的xhr变量位于click事件发生时调用的函数内部。

调用中止方法时,xhr不是用于post方法的变量。

xhr变量必须在绑定到click事件的函数的外部,否则在检查其他click事件时将是未定义的。

此外,由于您可能需要多个xhr变量来存储不同的帖子,因此您应该创建一个数组或对象来存储不同的帖子。

var xhr = [];

$('.methods a').click(function(){
    // do something global to the anchors, eg : change the bg color, etc
    // set the target container
    var target = $(this).attr('href');

    //if user clicks fb_method buttons
    if($(this).hasClass('fb_method')){
        //do ajax request (add the post handle to the xhr array)
        xhr.push( $.post("/ajax/get_fb_albums.php", function(msg) {                           
            $(target).html('').append(msg).fadeIn();
        }) );
    }else{
        //abort ALL ajax request
        for ( var x = 0; x < xhr.length; x++ )
        {
            xhr[x].abort();
        }
        $(target).fadeIn();
    }
    return false;
});


 类似资料:
  • 问题内容: 我有一个ajax电话 现在,这里是10分钟后收到的答复。因此,ajax调用被多次调用。为什么会发生这种情况/我们如何确保ajax调用仅被调用一次? 问题答案: 禁用按钮的另一种方法是使用.one()方法,并在回调后重新绑定事件处理程序:

  • 本文向大家介绍防止重复发送 Ajax 请求,包括了防止重复发送 Ajax 请求的使用技巧和注意事项,需要的朋友参考一下 要考虑并理解 success, complete, error, timeout 这些事件的区别,并注册正确的事件,一旦失误,功能将不再可用; 不可避免地比普通流程要要多注册一个 complete 事件; 恢复状态的代码很容易和不相干的代码混合在一起; 推荐用主动查询状态的方式(

  • 我对这个被禁止的问题感到困惑。首先,我查看了相关的stackoverflow帖子,并在谷歌上搜索了足够多,但仍然不知道。 项目详细信息: HTML Instagram.php form_open()函数为访问令牌生成隐藏字段,并将其包含在ajax发布数据中。 JavaScript AdminScript.js 控制器 admin.php 当我使csrf保护状态为假时,它们都能正常工作。或者当我将p

  • 问题内容: 是否有可能使用jQuery 取消/中止尚未收到响应的Ajax请求? 问题答案: 大多数jQuery Ajax方法都返回XMLHttpRequest(或等效的)对象,因此您可以使用abort()。 请参阅文档: 中止方法 (MSDN)。取消当前的HTTP请求。 abort()(MDN)。如果请求已经发送,则此方法将中止请求。 更新: 从jQuery 1.5开始,返回的对象是名为jqXHR

  • 问题内容: 使用jQuery,如何 取消/中止 尚未收到响应 的Ajax请求 ? 问题答案: 大多数jQuery Ajax方法都返回XMLHttpRequest(或等效的)对象,因此您可以使用。 请参阅文档: abort Method (MSDN).取消当前的HTTP请求。 abort()(MDN)。如果请求已经发送,则此方法将中止请求。 var xhr = $.ajax({ type: “POS

  • 问题内容: 我正在使用JSONP ajax调用从其他域加载某些内容,并且如果用户在按钮上造成“ mouseover”,则将执行所有这些操作。 我可以将$ .ajax()调用return捕获为xhr对象,并在用户每次导致“ mouseover”时使用它中止ajax请求。但是仍然会调用JSONP回调函数,这会导致错误,并且我认为这是因为xhr.abort()方法不会阻止调用回调函数。 我尝试用try