生产中有效的jQuery on Development失败

时间:2008-10-06 19:39:48

标签: jquery

我正在使用jQuery编写一个相当基本的脚本。但是,脚本的行为会有所不同,具体取决于我是在本地Web服务器(localhost)上还是在生产服务器上运行它。

在开发时,以下代码返回我期望的HTML:

$('#objID').siblings('.mAddress').html();

在制作时,同一语句返回undefined

两台机器上的文档结构相同。我能找到的唯一区别是当我使用Firebug逐步完成脚本时。在开发机器上,将手表放在$('#objID')。兄弟姐妹('。mAddress')上会产生[ span#object ]生产时同一手表导致[ [ span#object ] ]
(注意两组方括号)。

有什么想法吗?

添加了:

我已经确认这两个库是相同的。

我已经使用Firebug做了一些实验。该脚本的另一部分使用以下语句获取一组元素:

$('.ParentColumn2').each(function(i) { ... })

在该函数的正文中,如果我在this上设置监视,则在开发时this的值是我所期望的:div.ParentColumn2,但在生产时{的值为{ {1}}返回类似于数组的内容:this

HTML基本上是一个表格(我已经删除了不相关的HTML,行重复了):

[ div.ParentColumn2, div.ParentColumn2, div.ParentColumn2, .....]

两台机器之间的HTML尽可能相同,因为它们都是由.Net生成的(不要让我开始)。

6 个答案:

答案 0 :(得分:1)

鉴于你有不同的行为,可以合理地假设某些东西在两个页面之间是不同的,所以我的建议是将两个页面减少到保持当前行为的最小值,然后看看是什么是不同的。

答案 1 :(得分:1)

我不使用.siblings()...(或者不需要)......

根据jquery docs ....在div(下面)上运行.siblings()将不会返回任何内容,但在其中一个p的$('p:first')将返回另一个

<div><p></p><p></p></div>

尝试使用

$('#objID').find('.mAddress').html();

$('#objID').children('.mAddress').html();

$('#objID .mAddress').html();

看起来很奇怪,它可以用于开发但不用于生产......但试试这个。

-Bruce

答案 2 :(得分:1)

你的代码是否在$(document).ready(function(){...})中; ?

如果没有,这可能会导致不同的行为。在你的本地开发机器上,也许所有东西都被加载得如此之快,以至于你的Javascript被调用的类型完成了DOM树,但是在生产服务器上也许事情还没有完成。

不解释FireBug中显示的额外嵌套括号。

答案 3 :(得分:0)

我要说的几个方面是缓存,在你的开发环境中,每个请求都可能会重新加载所有请求,尝试在你的javascript include标记的末尾添加一个“?asdfasfrandom”以确保它们全部获得更新。

如果不是这样,你的javascript文件在服务时会被合并吗?例如,在Rails中,默认行为是将它们全部放入一个文件中,这可能会弄乱事情。

如果不是这样,则可能是因为下载时间,服务器上的javascript文件以不同的顺序加载,或者以不同于本地的顺序执行。在执行代码之前,请确保dom已准备就绪。

基本上看起来它可能不是你的代码的问题(假设你使用相同的浏览器并且具有相同的HTML),但是订单出现了问题。

答案 4 :(得分:0)

在dev中放入与prod相同的数据,然后为两者转储视图源并进行差异。

为什么要使用兄弟姐妹的财产而不只是:

$('#objID .mAddress').html();

另外我认为兄弟姐妹和上面的人都会返回一个项目数组而不仅仅是一个项目,所以我可能会选择这样的东西:

$($('#objID .mAddress').get(0)).html();

仅返回第一项的html。

答案 5 :(得分:-3)

我不经常使用jQuery,但我首先怀疑你的库是不同步的。