返回另一个(相同)XMLHttpRequest的链接

时间:2010-10-31 21:36:58

标签: javascript jquery ajax xmlhttprequest

我有一个链接发出一个ajax请求,它通过XHR请求打印另一个链接,在此之前cliked

所以它就像一个循环:

开始XHR
<a href="javascript:void(0)" class="doXHR">do XHR</a>

比进入Ajax成功函数我重复我的html这个链接:

<a href="javascript:void(0)" class="doXHR">do XHR</a>

但是当我通过之前的doHXR调用的成功函数输出相同的链接到html时,它不允许我做另一个(doXHR ajax调用)

所以,如果我点击相同的链接,但是从ajax生成相同的链接,它不允许我发送另一个(相同的)doXHR请求...:/

任何想法?

抱歉我的英语不好:P

2 个答案:

答案 0 :(得分:0)

在我看来,您为do XHR链接分配了一个事件监听器,看起来回调函数正在改变与您提到的代码的链接。

执行此操作时,附加到该链接的原始事件侦听器已消失,您将不得不重新附加它。另一种可能性是使用jQuery的.live函数,该函数在“绑定”事件监听器之后还会触发附加到DOM的元素上的事件:

$(".doXHR").live('click', function() {
  // Live handler called.
});

答案 1 :(得分:0)

我不会删除链接,然后在执行Ajax请求时完全重新创建它。如果您只是直接使用XMLHttpRequest,我建议您查看精彩的jQuery Ajax documentation,了解如何以jQuery方式执行此操作。

以正确的方式行事

如果你需要阻止连续第二次点击链接产生任何影响(直到请求完成,那就是),你可以使用jQuery的.one() method来确保事件处理程序只触发一次:< / p>

$(function() {
    function doAjax() {
        $.ajax({..., success: function() {
            // Do what you must to the HTML page

            // Allow the user to click again to make the request again
            $('.doXHR').one('click', doAjax);
        }, ...});
    }

    $('.doXHR').one('click', doAjax);
});

隐藏或更改链接的颜色

如果您希望页面的行为就像请求发生时删除链接一样:

$('.doXHR').css('display', 'none'); // before Ajax request
$('.doXHR').css('display', ''); // after Ajax request

如果您只想将链接变灰,请使用:

$('.doXHR').css('color', 'gray'); // before Ajax request
$('.doXHR').css('color', ''); // after Ajax request

这是使用.one(...)绑定click事件处理程序的补充。