我有一个链接发出一个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答案 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事件处理程序的补充。