Javascript 使用multidata表单上载文件时,从servel获取ajax调用的响应
我的项目有点小问题。 我有几个jsp和Java类。在一个jsp中,我只使用输入type=“file”和type=“submit”创建一个表单,然后我有一个ajax调用并将所有formdata发送到我的servel上的doPost类。然后我将该文件发送到数据库,一切正常,我的问题是我想将id从数据库返回到.jsp。我可以访问doPost并在其上打印以检查我的密钥,但无法将其发送到ajax调用中的success函数。。 这是我的代码,我真的很感激任何帮助,谢谢Javascript 使用multidata表单上载文件时,从servel获取ajax调用的响应,javascript,java,jquery,ajax,jsp,Javascript,Java,Jquery,Ajax,Jsp,我的项目有点小问题。 我有几个jsp和Java类。在一个jsp中,我只使用输入type=“file”和type=“submit”创建一个表单,然后我有一个ajax调用并将所有formdata发送到我的servel上的doPost类。然后我将该文件发送到数据库,一切正常,我的问题是我想将id从数据库返回到.jsp。我可以访问doPost并在其上打印以检查我的密钥,但无法将其发送到ajax调用中的success函数。。 这是我的代码,我真的很感激任何帮助,谢谢 <form id="upload
<form id="uploadDocuments" target="invisible" method="POST" action="UploadDocumentsAjaxService" enctype="multipart/form-data">
<iframe name="invisible" style="display:none;"></iframe>
<h3 style="width: 71%;margin-left: 8%;">ANEXAR FICHEIROS:</h3>
<h4 style="margin-left: 8%; color: #F7A707" >Escolher ficheiro para anexar: </h4>
<input type="file" id="file_input" name="file" size="50" style="width: 60%; margin-left: 8%;"/>
<input type="submit" value="Upload" />
</form>
然后是我的servlet类:
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
response.setContentType("text/html;charset=ISO-8859-1");
PrintWriter out = response.getWriter();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
ChangeEntityRequestActionBean actionBean = new ChangeEntityRequestActionBean();
if(!isMultipart)
return;
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Sets the size threshold beyond which files are written directly to
// disk.
factory.setSizeThreshold(MAX_MEMORY_SIZE);
// constructs the folder where uploaded file will be stored
String uploadFolder = getServletContext().getRealPath("") + DATA_DIRECTORY;
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(MAX_REQUEST_SIZE);
String fileName = "";
Long documentKey = null;
String key = "";
try {
// Parse the request
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
fileName = new File(item.getName()).getName();
String filePath = uploadFolder + File.separator + fileName;
File uploadedFile = new File(filePath);
System.out.println(filePath);
// saves the file to upload directory
item.write(uploadedFile);
}
documentKey = actionBean.insertDocument(item, fileName);
System.out.println("Key from DAO ------->>>>>"+documentKey);
key = String.valueOf(documentKey);
}
System.out.println("Key in String from DAO ----->"+key);
System.out.println();
out.println("success");
response.flushBuffer();
}catch (FileUploadException ex) {
throw new ServletException(ex);
} catch (Exception ex) {
throw new ServletException(ex);
} finally {
out.close();
}
}
我只想将键值发送到out.println,这样我就可以在jquery函数上使用该值。在servlet的
doPost()
的第一行中,将响应的内容类型更改为“application/json”。然后将JSON字符串写入输出流。有很多方法可以为您实现这一点,但是对于如此简单的事情,您可以自己编写JSON。这实际上可能有一个优势,因为您的密钥是;将其视为字符串,您不必担心整数是如何表示的
// replace out.println("success"); with this:
out.print("{\"key\": \"" + key + "\"}");
然后在success回调函数中,您可以访问键作为数据
对象的字段。您需要在ajax方法中指定数据类型(dataType:'json'
)
在servlet中的
doPost()
的第一行中,将响应的内容类型更改为“application/json”。然后将JSON字符串写入输出流。有很多方法可以为您实现这一点,但是对于如此简单的事情,您可以自己编写JSON。这实际上可能有一个优势,因为您的密钥是;将其视为字符串,您不必担心整数是如何表示的
// replace out.println("success"); with this:
out.print("{\"key\": \"" + key + "\"}");
然后在success回调函数中,您可以访问键作为数据
对象的字段。您需要在ajax方法中指定数据类型(dataType:'json'
)
作为json dude发送。我尝试使用json发送密钥,但它不起作用作为json dude发送。我尝试使用json发送密钥,但它一点也不起作用(编辑帮助,谢谢!)。但是现在它发送字符串{\'key\':\''+key+'\'}“要一个文件,IE问我是要打开还是保存。。。我无法找到一种方法来提醒我的成功函数中的某些东西,它似乎从来没有进入过。嗯,我不知道为什么会发生这种情况,通过查看您的代码。你明白了吗?是的,我刚刚添加了这三行代码,它起了作用:cache:false,contentType:false,processData:false,这有点帮助,谢谢!;)。但是现在它发送字符串{\'key\':\''+key+'\'}“要一个文件,IE问我是要打开还是保存。。。我无法找到一种方法来提醒我的成功函数中的某些东西,它似乎从来没有进入过。嗯,我不知道为什么会发生这种情况,通过查看您的代码。你明白了吗?是的,我刚刚添加了这三行,它工作了:cache:false,contentType:false,processData:false,
success: function (data) {
var key = data['key'];
addFilesToTable(key);
return true;
}