【问题标题】:Jquery getScript (after ajax call) uses 100% CPU [closed]Jquery getScript(在 ajax 调用之后)使用 100% CPU [关闭]
【发布时间】:2016-01-18 20:01:12
【问题描述】:

我正在通过 ajax 在一个页面上加载一篇文章,该页面上已经有几个我需要的脚本。我需要重新加载这些脚本并最初将它们放在被调用的 ajax 页面中,但意识到(因为 chrome 控制台警告)这是一个禁忌,所以我尝试使用正确的(?)方法并加载我的在我的 ajax 调用完成后使用 jQuery.getScript 的脚本(通过 .ajaxComplete 获得通知)。

当我尝试加载我的脚本(见下面的代码)时,它似乎可以工作,但我在控制台的某种循环中收到了一系列“成功”消息,直到我的机器使用接近100% CPU,我需要强制退出浏览器。

任何想法是什么原因造成的?谢谢!

jQuery(document).ready(function(){

  jQuery.ajaxSetup({cache:false});
  jQuery(".post-link").click(function(){
    var post_link = $(this).attr("href");

    jQuery("#single-post-container").html("content loading");
    jQuery("#single-post-container").load(post_link);

    jQuery( document ).ajaxComplete(function() {
      jQuery( ".log" ).text( "Triggered ajaxComplete handler." );
      jQuery.getScript( "scriptone.js" )
      .done(function( script, textStatus ) {
        console.log( textStatus );
      })
      .fail(function( jqxhr, settings, exception ) {
        jQuery( "div.log" ).text( "Triggered ajaxError handler." );
      });
      jQuery.getScript( "scripttwo.js" )
      .done(function( script, textStatus ) {
        console.log( textStatus );
      })
      .fail(function( jqxhr, settings, exception ) {
        jQuery( "div.log" ).text( "Triggered ajaxError handler." );
      });

    });

    return false;
  });

【问题讨论】:

  • 1. 没有正确关闭。 2. 取决于你有什么。 3. 取决于它得到什么响应。
  • 为什么需要重新加载这些脚本?
  • 4. 循环地狱从这里开始:jQuery.getScript( "scriptone.js" )
  • 并且不要将全局 ajax 处理程序放在事件处理程序中。那些应该只在页面上调用一次
  • 这是一个可怕的无限循环!每次迭代都会增加分叉,这将很快失去控制。

标签: javascript jquery ajax getscript


【解决方案1】:

您的ajaxComplete 函数在每次调用ajax 时都会执行。它本身包含 ajax 调用,这些调用都将触发该 ajaxComplete 函数,该函数包含 ajax 调用,该函数将触发该 ajaxComplete 函数,该函数包含 ajax 调用,该函数将触发该 ajaxComplete 函数,该函数包含 ajax 调用,该函数将触发该 ajaxComplete 函数,该函数包含 ajax 调用这将全部触发这个 ajaxComplete 函数,其中包含 ajax 调用 这将全部触发这个 ajaxComplete 函数,其中包含 ajax 调用这将全部触发这个 ajaxComplete 函数,其中包含 ajax 调用这将全部触发这个 ajaxComplete 函数...

这是无限递归,而不是循环。不要将 ajax 放在 ajaxComplete 函数中。

【讨论】:

  • 好的,谢谢。很明显,我对 .ajaxComplete 的功能感到困惑。从该函数内部删除我的 getScript 行就可以了。谢谢!
猜你喜欢
  • 2014-07-21
  • 1970-01-01
  • 2022-07-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2011-06-25
相关资源
最近更新 更多