我今天在工作场所遇到了一个奇怪的问题。在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"/>
答案 0 :(得分:5)
在href
或src
属性中,空字符串将被视为相对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。