【发布时间】:2015-06-24 11:21:35
【问题描述】:
我有一个包含四个字段的表单,文件、名称、类型(只是一个字符串)和 taskInstanceId。
<form>
<table id="documentDetailsTable">
<tr>
<td>Document Type: </td>
<td><select id="documentType" name="type"> </select></td>
</tr>
<tr>
<td>
Document Name:
</td>
<td>
<input type="text" id="documentName" name="name"/>
</td>
</tr>
<tr id="newFile">
<td>
Choose a file:
</td>
<td>
<input type="file" name="file" />
</td>
</table>
<input type="text" style="display: none;" name="taskInstanceId" id="taskInstanceId">
<input id="uploadButton" value="Upload" type="submit"/>
<input class="closeButton" id="closeNew" value="Close" type="button"/>
</form>
如果我提交此表单,它将连接到我的 FileUploadController 并上传文件。
@RequestMapping(value = "/formTask.do", method = RequestMethod.POST)
public ModelAndView handleFormTaskUpload(@RequestParam("name") String name,
@RequestParam("type") String type,
@RequestParam("file") MultipartFile file,
@RequestParam("taskInstanceId") int taskInstanceId)...//rest of the code
现在我想使用 jquery/json 提交此表单,以便我可以返回一个指示成功上传的字符串,然后在页面上显示一个对话框来指示这一点。 (我不想返回新的 ModelAndView)。
所以我使用相同的 html 表单创建了一个新的 Controller 函数...
@RequestMapping(value = "/formTask2.json", method = RequestMethod.POST)
public String handleFormTaskUpload2(UploadTaskDocument myNewUpload)).../rest of the code
现在我想使用 jQuery 提交上面的表单。我的尝试就在这里。
每次更改文件时都会调用此函数。
function prepareUpload(event)
{
files = event.target.files;
}
并且这个是在表单提交的时候调用的。
function uploadFiles(event)
{
event.stopPropagation(); // Stop stuff happening
event.preventDefault(); // Totally stop stuff happening
var data;
data = {
documentName: $("#documentName").val(),
documentType: $("#documentType").val(),
taskInstanceId: selectedTaskInstanceId,
uploadedfiles: files
};
var json = JSON.stringify(data);
$.ajax({
url: '/SafeSiteLive/formTask2.json',
type: 'POST',
data: json,
cache: false,
dataType: 'json',
processData: false, // Don't process the files
contentType: false, // Set content type to false as jQuery will tell the server its a query string request
success: function (data, textStatus, jqXHR)
{
if (typeof data.error === 'undefined')
{
// Success so call function to process the form
//submitForm(event, data);
}
else
{
// Handle errors here
console.log('ERRORS: ' + data.error);
}
},
error: function (jqXHR, textStatus, errorThrown)
{
// Handle errors here
console.log('ERRORS: ' + textStatus);
// STOP LOADING SPINNER
}
});
}
Json 数据在发布之前看起来像这样......
但是一旦它到达服务器,一切都是空的......
【问题讨论】:
-
是的,看起来没问题,除了你的
submitForm在你的jQuery.ajax调用的成功案例中。不确定submitForm做了什么,但它不能再提交表单,因为您确实已经使用 ajax 请求发送了数据。在成功案例中,如果表单数据已处理并且您从服务器获得成功响应,则调用应该执行的操作。 -
忽略这一点,我还没有编写那个阶段的代码。我现在遇到的问题是尝试提交 ajax 时出现 404 错误,我不知道为什么?
标签: javascript jquery ajax spring-mvc spring-form