Javascript 使用JQuery提交两次表单

Javascript 使用JQuery提交两次表单,javascript,java,jquery,spring-2.5,Javascript,Java,Jquery,Spring 2.5,我是UI的新手,我们正在尝试使用JQuery实现一个web调用,其中我们遇到了一个奇怪的webcall问题,即,当我们尝试进行post http调用时,我们在服务器访问日志中有一个observer第一个http post调用,然后立即存在一个http get调用 请在.jsp页面下方找到: <html> <head> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/li

我是UI的新手,我们正在尝试使用JQuery实现一个web调用,其中我们遇到了一个奇怪的webcall问题,即,当我们尝试进行post http调用时,我们在服务器访问日志中有一个observer第一个http post调用,然后立即存在一个http get调用

请在.jsp页面下方找到:

<html>

<head>
<script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<%
    String urlVal = (String) request.getAttribute("dataURL");
%>
<%
    String emailID = (String) request.getAttribute("emailID") ;
%>

<script type="text/javascript">
var url="<%=urlVal%>";
alert(url);

     function navigateWithForm() {
        var form = $('<form></form>');
        form.attr({
            method: 'POST',

            action: url
        });
        form.append(getInput());
        form.appendTo('body').submit();

     }

     function getInput() {
         alert("<%=emailID%>");
        return $('<input type="hidden" />').attr({
            name: 'header',
            value: '<%=emailID%>'   
        });
    }

    $(document).ready(function() {
        navigateWithForm();
    });

</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>

</head>


</html>

var url=“”;
警报(url);
函数navigateWithForm(){
变量形式=$('');
form.attr({
方法:“POST”,
操作:url
});
append(getInput());
form.appendTo('body').submit();
}
函数getInput(){
警报(“”);
返回$('').attr({
名称:'标题',
值:“”
});
}
$(文档).ready(函数(){
导航格式();
});
JSP页面
在后端,该服务部署在weblogic中,并在Spring2.5框架中设计。我们有用于负载平衡的apache代理服务器


任何帮助都将不胜感激。

您的问题中的代码没有什么特别的错误(除非您确实想使用AJAX,但我觉得这是另一个问题)

您的服务器端代码似乎实现了一种典型的请求处理模式

下面是正在发生的事情

Browser               |  Server
----------------------|-----------------------------
create form           |
  action=urlVal       |
  method=POST         |
                      |
submit form           |
  POST "urlVal" -------->
                      |
                      |  Process request
                      |
                    <--- Response
                      |    302 Found
                      |    Location: someUrl
                      |
GET "someUrl" ---------->
                      |
                    <--- Response
                      |    500 Internal Server Error
返回这样的重定向响应,告诉客户端(浏览器)通过响应头执行
GET
请求

302 Found
Location: /foo
请注意,该方法如何需要
标题
请求参数

浏览器将尝试通过GET请求
/foo
,该请求将失败,因为没有带参数的请求正文(即,没有
标题

解决办法是:

  • 重定向到响应
    GET
    请求的现有URL
  • 处理对要重定向到的URL的
    GET
    请求

    @RequestMapping(path = "/foo", method = RequestMethod.GET)
    public String getFoo() { // note, no required parameters
        // etc
    }
    
    或者

  • 以不同的方式回应。即使是空洞的回答也可以

    @RequestMapping("/foo")
    @ResponseBody
    public ResponseEntity<Void> handleFoo(@RequestParam String header) {
        // process, etc
        return ResponseEntity.ok().build();
    }
    
    @RequestMapping(“/foo”)
    @应答器
    公共响应性handleFoo(@RequestParam字符串头){
    //过程等
    返回ResponseEntity.ok().build();
    }
    

    • 经过几天的努力,我终于找到了问题的解决办法。这真是一个小小的改变。希望这个解决方案对其他正在与这个问题作斗争的人有用。实际问题是Jquery调用的url/操作

      先前传递的URL

      上下文:root?param1=value¶m2=2

      已传递正确的URL

      上下文:root/?param1=value¶m2=2


      感谢Phil,我可以看到请求和响应的标题以及其他信息,如位置、来源和推荐人

      您能解释一下问题的具体内容吗?您是说您看到的是
      get
      请求,而不是
      post
      请求?请查看浏览器的网络控制台。您可能必须启用“保留日志”选项,但您应该能够看到所有请求和响应。如果让我猜一下,对POST请求的响应是302/303,带有
      位置
      头,导致立即GET请求。请参阅@Phil,因为我没有在Jquery中导航url,那么它应该是302状态代码。这是一个简单的投递表单,但是表单被提交了两次,一次是get,一次是post,如果我错了,请更正我。@Taplar是,在控制台日志中,我看到一个post表单提交,302 http响应,然后http get submission 500,因为服务器由于表单数据不足而无法执行操作。添加反对票不是问题我希望任何正在添加负片的人请告诉我错误。这对理解问题非常有帮助。请纠正我,我编写的jsp代码没有正确执行重定向。和我试图在本地环境中执行的代码一样,我在tomcat中部署了jsp代码,在weblogic中部署了服务器代码,运行良好。jsp在集成环境中有所不同。@ramesh027我只能在您的问题中看到代码。您没有包含处理POST请求的代码,因此我无法对此进行任何评论。你读过维基百科的链接文章了吗?看起来问题可能是这样的。我对UI有点陌生,无法找到solution@ramesh027我再说一遍。。。您没有使用任何AJAX。因此,这些相关问题都不适用。我的回答中有什么你不清楚的吗?问题完全在于服务器端代码问题不是服务器端代码的问题,而是url的问题。传递的url是Context:root?param1=value¶m2=2我们更改了url,因为现在正在发生多个调用
      @RequestMapping("/foo")
      @ResponseBody
      public ResponseEntity<Void> handleFoo(@RequestParam String header) {
          // process, etc
          return ResponseEntity.ok().build();
      }