jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在jquery.ajax()加载的页面中运行的脚本过早地运行document.ready大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的网站使用 jquery.load()在页面的大块上进行导航.我真的很感激能够只包含加载内容的特定部分,这里是id =“content”的div:
$(frame_SELEctor).load(url +" #content",function(response,status,xhr) {...});

但是现在我需要能够运行作为动态加载页面一部分的脚本. Jquery.load()删除了这些脚本,但jquery.ajax()没有.所以我在ajax调用中复制了jquery.load的部分内容功能:@H_197_5@

$.ajax({
  url: url,dataType: 'html',success: function(data,textStatus,XMLhttprequest) {
      // Only include the response within the #content id element.
      $(frame_SELEctor).html( jQuery("<div>")
            .append(data)
            .find("#content")
      );
  }
});

问题是从ajax调用动态加载的脚本无法可靠地运行.有时它们似乎没有任何影响,可能是因为它们运行得太早.脚本只是在jquery中进行DOM操作 – 不依赖于图像或flash或任何不应该加载的东西.为了避免陷入困境,我有这个可怕的黑客来让事情发挥作用.而不是仅使用AJAX加载的脚本:@H_197_5@

$(document).ready( function() {...} );  // unreliable

我在运行之前将脚本延迟200ms:@H_197_5@

$(document).ready( window.setTimeout( function() {...},200 )); // HATE THIS

有人知道如何在没有硬编码延迟的情况下可靠地完成这项工作吗?我猜这是< script>之间的竞争条件.以及将#content加载到新div中的逻辑,但我不知道如何处理它.@H_197_5@

解决方法

我假设脚本正在对您通过AJAX添加的DOM元素进行操作.

jQuery有一个isReady属性,它在页面上触发就绪事件后设置.@H_197_5@

对jQuery.ready(…)的任何后续调用都将首先检查此isReady标志.如果该标志设置为true,它将立即调用该处理程序.您可以看到为什么这会导致代码出现问题.@H_197_5@

一种选择是将响应加载到jQuery片段中并解析出所有< script />标签供以后执行.@H_197_5@

var ajaxResponse = $(html);
var scripts = ajaxResponse.find('script');

// Move your scripts into a new element
var tempScripts = $().append(scripts);

// Append your content,followed by your script tags
$(document).append(ajaxResponsE);
$(document).append(tempScripts);

大佬总结

以上是大佬教程为你收集整理的在jquery.ajax()加载的页面中运行的脚本过早地运行document.ready全部内容,希望文章能够帮你解决在jquery.ajax()加载的页面中运行的脚本过早地运行document.ready所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。