12

我在网页上看到一些奇怪的行为......我使用常规脚本标签包含了 jQuery(和 jQuery UI)。当页面加载时,我看到文件已加载(来自本地浏览器缓存,因为文件上有遥远的 Expires 标头)。

但是,似乎 jQuery 本身发起了一个新的网络请求以再次获取自身,包括导致文件下载的随机参数值(即不使用缓存版本)。

Chrome 网络标签的截图:

jQuery 加载自身...?

这很奇怪......这里发生了什么?

更新:触发此行为的代码如下:

   $(window).load(function() {
     $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
   });

如果我改成这个,“双重加载”就会消失:

   $(window).load(function() {
       $("#t20ContentRightWrapper").toggle("fade", 400);
   });

所以基本上,当我使用“幻灯片”动画时,jQuery 和 jQuery UI 会重新加载额外的网络请求,而使用“淡入淡出”动画则不会。

我想使用“幻灯片”动画,所以我需要知道这里发生了什么......!

更新 2:这是一个屏幕截图,显示了将鼠标悬停在 Chrome 中的“Initiator”脚本上时的调用堆栈:

细节

4

7 回答 7

1

你也可以试试

$(function() {
   $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
});
于 2013-05-31T00:08:34.893 回答
0

没有完整的页面代码很难说,我的猜测是 jQuery 包含的代码在切换的容器内

于 2013-05-24T20:43:01.003 回答
0

您是否尝试过用简单的段落替换 #t20ContentRightWrapper 的内容?如果解决了它,您可以取出部分内容以找到有问题的位。另外,也许您有两个具有相同 id 的元素。您也可以尝试重新下载并替换您的 jquery.js 文件。您仍然可以从 github 获得 1.7.1。但如果我是你,我也会尝试当前版本并保留它,除非它破坏了一些东西。

如果问题仍然存在,如果您能说出我们可以在哪些浏览器/操作系统和版本上重现它会很有帮助?

于 2013-08-14T23:18:05.533 回答
0

jQuery 文档对.load()方法有以下警告-

Ajax 模块还有一个名为.load() 的方法。哪个被触发取决于传递的参数集。

你可以试试这个来排除任何歧义

$(window).on("load", function(){
    $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
});
于 2013-05-29T20:47:52.587 回答
0

你试过使用slideToggle()吗,可能是这样的:

 $(window).load(function() {
     $("#t20ContentRightWrapper").slideToggle();
   });

无论如何,slideToggle 运动效果默认为 400

于 2013-05-29T20:33:54.187 回答
0

你检查过回调的内容吗?我知道这听起来很明显,但你确定 jquery 库不包含在从 ajax 回调返回的 html 中。这可能是它加载两次的最可能原因。检查回调响应,看看它是否从那里加载。

于 2013-04-20T19:21:17.243 回答
0

load 函数的含义与我认为您所期望的不同:

此方法是从服务器获取数据的最简单方法。它大致相当于 $.get(url, data, success) ,只是它是一个方法而不是全局函数,并且它具有隐式回调函数。当检测到成功响应时(即当 textStatus 为“success”或“notmodified”时),.load() 将匹配元素的 HTML 内容设置为返回的数据。这意味着该方法的大多数用途都非常简单:

也许您想改用它:

`

$(function() {
     $("#t20ContentRightWrapper").toggle("slide", { direction: "right" }, 400);
   });

`

于 2013-08-22T05:18:09.313 回答