返回另一个(相同)XMLHttpRequest的链接
我有一个链接可以创建一个ajax请求,并通过XHR请求打印另一个链接,然后在这个链接上绑定
所以它就像一个循环:
从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
在我看来,你为你的do XHR
链接分配了一个事件监听器,并且它看起来像回调函数正在改变你提到的代码的链接。
这样做时,连接到该链接的原始事件侦听器已经消失,您将不得不重新附加它。 另一种可能性是使用jQuery的.live
函数,该函数在绑定事件侦听器之后还会触发附加到DOM的元素上的事件:
$(".doXHR").live('click', function() {
// Live handler called.
});
我不会删除链接,然后在执行Ajax请求时完全重新创建链接。 如果您只是直接使用XMLHttpRequest,我建议您查看一下jQuery Ajax文档,了解如何以jQuery方式执行此操作。
这样做是正确的
如果您需要阻止连续第二次点击链接以获得任何效果(直到请求完成,那就是),那么可以使用jQuery的.one()
方法确保事件处理程序仅触发一次:
$(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事件处理程序之外。