是否可以提交表单并同时发送ajax请求jquery

时间:2013-05-09 14:06:59

标签: java ajax forms spring submit

我想提交一个表单,同时向我的Spring MVC服务器发送一个ajax请求。为此,我有一个这样的表格:

<form id='confirma' method='post' action='confirma'>
  <button type='submit' id='save' class='btn btn-success' value='Save'>Enviar</button>
</form>

在我的服务器中,我有两种方法可以接收这两个请求(ajax请求和普通表单提交)。

// receive from form
@RequestMapping("fromForm")
public String fromForm(Model model)
{    
   // get atb1 values from database
   model.addAttribute("atb1", atb1);

   return "file.jsp";    
}

// receive from ajax
@RequestMapping("fromAjax")
public void fromAjax(String jsonData)
{    
   // deserialize json Data and insert it on database
   System.out.println("data received!");        
}

我的目的是从Ajax请求接收数据,将其保存在数据库中,并在表单提交方法中获取此数据,在此示例中称为fromForm。

我知道这可能看起来很疯狂,但我这样做是因为我有一系列的提交表单,我想让它们彼此独立,所以我可以调用它们中的任何一个而不传递之前的数据形成。

我试图通过使用jQuery来处理它。所以这就是我所做的:

function ajaxRequest() {  
    var jsonArray = new Array();

    // Complete the jsonArray with an Array of objects created by myself

    $.ajax({
        url: "fromAjax",
        cache: false,
        contentType: false,
        processData: false,
        data: JSON.stringify(jsonArray, null, 4),
        type: 'POST',
        success: function (data, textStatus, jqXHR) {
               console.log("success ajax");
               return true;
        },
        error: function (xhr, status, error) {
               console.log("error ajax");
               return false;
        }
    });
}
$(document).on('submit', '#confirma', function(event) {
    event.preventDefault();
    // by return this method, I would just call the another jsp page, if the ajax              
    // request is completed successfully 
    return ajaxRequest();
});

这不起作用..如果我在表单提交中删除了event.preventDefault,我只收到服务器上的表单提交。如果我有event.preventDefault调用,则只有ajax请求命中服务器。

如何让两个请求都到达服务器?

1 个答案:

答案 0 :(得分:2)

从浏览器的角度考虑这一点。想象一下,它已经成功地向/fromAjax 发送了一个XmlHttpRequest到/confirma的常规表单提交POST。现在假设服务器首先响应POST /confirma。当表单提交响应包含要显示的新HTML页面或重定向到另一个页面时,浏览器要做什么 - 浏览器应该如何处理(仍然未决的)XmlHttpRequest?

或者从服务器的角度来看 - 当服务器在收到或开始处理fromForm()方法的请求之前处理fromAjax()方法的请求时会发生什么?

如果您打算

  

从Ajax请求接收数据,将其保存在数据库中,并以表单提交方式获取此数据

然后我会首先发送ajax请求,然后当你收到响应时,触发Javascript中的表单提交,以便这些请求连续发生(一个接一个)而不是并行发生。