【问题标题】:Return link for another (same) XMLHttpRequest返回另一个(相同)XMLHttpRequest 的链接
【发布时间】:2025-12-27 03:45:10
【问题描述】:

我有一个发出 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

【问题讨论】:

    标签: javascript jquery ajax xmlhttprequest


    【解决方案1】:

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

    这样做时,附加到该链接的原始事件侦听器消失了,您必须重新附加它。另一种可能性是使用 jQuery 的 .live 函数,它还会在“绑定”事件侦听器后触发附加到 DOM 的元素上的事件:

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

    【讨论】:

      【解决方案2】:

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

      以正确的方式做事

      如果您需要防止第二次连续单击链接产生任何影响(直到请求完成),您可以使用 jQuery 的.one() method 来确保事件处理程序只触发一次:

      $(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(...) 绑定点击事件处理程序的补充。

      【讨论】:

      • 天哪,你修好了!!!!!!非常感谢...这只是一个 live('click',function(){}) 来解决我的问题