Javascript <script>标记错误</script>

时间:2012-10-16 01:54:24

标签: javascript

我今天在工作场所遇到了一个奇怪的问题。在JSP中,我有多个脚本标记,如下所示,其中一个脚本标记的src中有一个空格。这个JSP成功加载了firefox,在我输入值并单击提交后,JSP被提交两次,一次带有post请求,另一次带有get请求。问题是表格提交两次的原因?如果有人遇到过这个问题。请回复。

我们有些人如何通过在脚本标记中放置一个虚拟js文件来解决这个问题,但是想要了解它背后的真正问题。

<script src="file.js" type="text/javascript"/>
<script src="file1.js" type="text/javascript"/>
<script src="file2.js" type="text/javascript"/>
<script src="file3.js" type="text/javascript"/>
<script src=" " type="text/javascript"/>
<script src="file4.js" type="text/javascript"/>

2 个答案:

答案 0 :(得分:5)

hrefsrc属性中,空字符串将被视为相对URI,因此将解析为与当前加载的脚本相同的路径。因此,使用空的src调用<script>标记(假设JSP修剪了空白),就像说:

<script src="thispage.jsp" type="text/javascript"/>

即使资源未被浏览器正确解析为JavaScirpt,服务器仍会将其发送到浏览器。从服务器端看,它看起来像thispage.jsp的GET请求并且尽职尽责地响应,导致两个请求thispage.jsp - 你期望的POST和一个无关的GET。

答案 1 :(得分:0)

请注意,并非所有浏览器都支持“自动关闭”脚本标记。可能是Firefox错误地将您的空脚本标记误解为仅包含一些引用的脚本文件。

<script></script>         <!-- this works -->
<script />                <!-- this doesn't -->

违反直觉,其原因在this SO answer上得到了很好的解释。

编辑:我写了一个演示文件,从Chrome 22和IE9开始,这就是罪魁祸首。只要我的服务器正好运行,try my demo for yourself