我们经常可以看到这样的情景,在页面加载的过程中,一个有着空src 属性的img元素被JavaScript 动态地赋值。这样做的问题是,在脚本执行之前元素就被浏览器渲染了(尤其是当你把脚本放到文档最后的时候)。所以浏览器依然会发起一个HTTP 请求,虽然它是一个空值。
同样的问题也发生在href 这个属性上。有些时候,开发人员想用超链接来触发JavaScript 的一个交互。这时问题就来了,当用户触发了“单击”操作,如果 href 是空的那么浏览器就向服务器发送一个HTTP 请求。这虽然不影响加载时间,但是会对服务器产生不必要的流量和压力,严重的以至于影响整个网站的用户体验。有一个简单的解决办法就是把href 的值设成JavaScript 语句,一条什么都不会做的语句。清单3-3 就是一个例子。
清单3-3:修正没有href 属性的a 标签
显然用这条JavaScript 语句不是最好的解决方案,我们希望有更好的办法,既可以在状态栏上有文字描述(当鼠标光标移到超链接上时),还可以阻止href 被请求。清单3-4告诉了我们如何去做。
清单3-4:给a 标签创建一个带有描述信息的href 属性
$("#triggerName").clic k(function(e){
e.preventDefault(); //取消单击事件的默认动作以阻止链接的跳转。
// 其他的代码
})
这样做的好处就是用户可以在单击之前得到一些提示,而且单击后也不会产生不必要的HTTP 请求。
有一点要指出的是,稍后会有不同的解决方案来应对用户关闭了 JavaScript 支持或JavaScript 不可用的情况,在那种情况下,会用一个真正的超链接。
还有一点要指出的是,空的 src 和href 也是会产生报错的。如果在发送空属性值的时候,追踪请求头的状态(用 cookie 或其他办法),是无法追踪到状态的。从这一点上来说,有很高的概率会让用户抓狂,如果他们有别的选择一定会离你而去,如果没有,他们只能跳脚叫骂了。
当然,每一个空属性的发送都会完整地写到日志文件里,如果发现有大量的这种日志,最好还是找到原因然后修复它。