0

我想提交一个表单,同时向我的 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 请求会到达服务器。

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

4

1 回答 1

2

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

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

如果您的意图是

从Ajax请求接收数据,存入数据库,在表单提交方法中获取该数据

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

于 2013-05-09T14:15:33.527 回答