为什么我的脚本会间歇性地失败?

时间:2010-10-30 21:00:35

标签: jquery jquery-plugins

我有一个名为Easy Slider的jQuery插件,我正在this site上实现,它以动画幻灯片格式显示精选内容。

如果您访问该网站,您会看到home page上有一个基本实现,Rods page上有一个更多的调整版本。在Rods页面上,我只是使用了实际滑块的11个实例。

该东西最初仅针对一个实例构建,但是在更高版本中添加了多个幻灯片功能。因此,直到今天,所有这些都在主页上运作良好。今天我在Rods页面上实现了11个实例(用它来展示客户产品的图库风格图像)。为了实现多个实例,我必须给每个幻灯片容器一个带有唯一ID的名称,然后传递参数来改变jQuery生成的“previous”和“next”按钮标记。

标记是这样的:

<div id="slider-1">
    <ul>
        <li><img src="/img/rod.jpg" /></li>
        <li><img src="/img/rod.jpg" /></li>
        <li><img src="/img/rod.jpg" /></li>
    <ul>
</div>

然后脚本在每个幻灯片div之后生成两个<span>元素,如下所示:

<span id="nextBtn"><a href="#">next</a></span>
<span id="prevBtn"><a href="#">previous</a></span>    

至少可以说是非常挑剔。我差点把头发拉过来,因为发生的事情对我没有任何意义。

这是我一直在经历的一些疯狂......

  • 实现了多个幻灯片,经过一些风格调整后,我在Firefox中看到并正常工作;我在Chrome浏览器中检查它,在那里我有一个较旧版本的页面,刷新后我的脚本都没有执行。回到FF并刷新浏览器中的脚本没有执行,虽然我没有在刷新之间更新代码。此外,我检查了我的错误控制台,没有列出任何错误。
  • 回到我的代码并通过查看我的本地副本和实时服务器副本进行双重检查以进行比较,没有差异。所以刷新了几次并清除了缓存,但仍然没有。然后离开我的电脑去击中头部,回来,刷新并且jQ脚本再次运行! (顺便说一句,不仅受影响的EasySlide脚本,而且还有一个脚本,我在页脚后淡入/淡出导航翻转)。
  • 再次在Chrome中刷新,这次我得到一个奇怪的行为,其中包含div的内联高度被应用,我不知道它来自何处。奇怪的是,浏览器之间看起来也不同。在Chrome中,每个项目看起来都是height:21px;。在Firefox中,对于列表中的第一张幻灯片,它看起来像height:271px,对于列表中的每张其他幻灯片看起来都是height:0px。不知道这是来自哪里或为什么。 虽然现在我正在写这篇文章,但我想知道我的标记是否存在问题,我必须在<div>内使用<ul>
  • 最后,最近我在每个浏览器上再次刷新(并且还从我的Macbook中查看),并且脚本没有再次执行。

也许有很多问题我无法确定这里发生了什么。如果你能说出来,我会非常感谢另一种观点......

  1. 你看到了什么 - 每个Rod贴子只有一个静态图像,或者旁边有左/右木制三角形按钮的一组滑动图像?
  2. 为什么脚本会像这样断断续续地失败?
  3. 您的浏览器上的图片窗口是否都显示全高?如果没有,您是否看到了内联样式以及来自何处。
  4. 很抱歉这里有很长的篇幅,如果这很大程度上来自简单缺乏javascript的经验。我认为自己在HTML&amp; amp; CSS,但非常适合JS的初学者。因此,非常感谢任何相关的输入。

1 个答案:

答案 0 :(得分:1)

我在两个页面上都看到了单个图像,并且PHP尝试从底部的Twitter获取内容时出现了一些错误,似乎过早地结束了页面。也许你在页面底部的某个地方有脚本的调用代码,因为脚本被炸出而没有运行?

每次与外部资源建立连接时,都应该为它做好准备以使其失败,并在每一步使用检查和/或异常捕获,以确保如果失败,它不会轰炸整个脚本

也许Twitter连接失败了,因为您为网页的每次点击都建立了新的连接?这很容易产生许多服务运营商认为会滥用的请求泛滥。出于这个原因,Twitter可能会故意阻止或限制来自您服务器的访问。

为了避免过多地攻击他们的服务器,并且为了提高页面生成的速度,你应该限制你对Twitter的请求数量,所以你只需要经常获取新信息,并存储一个缓存否则,数据库中的版本将返回。