Javascript 如何使用Ajax更新两种不同输入类型表单中的数据,而不清除另一种表单中的信息?

Javascript 如何使用Ajax更新两种不同输入类型表单中的数据,而不清除另一种表单中的信息?,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在创建一个网页,允许用户上传自己的图片,并创建一个拼贴,他们将能够添加一个标题,并(最终)按标题保存/检索 我目前正在使用Ajax,使用下面的JS将图像设置为背景: function setUploadedBackground(fileName){ var ajx; if (window.XMLHttpRequest) {// If the browser if IE7+[or] Firefox[or] Chrome[or] Opera[or]Safari

我正在创建一个网页,允许用户上传自己的图片,并创建一个拼贴,他们将能够添加一个标题,并(最终)按标题保存/检索

我目前正在使用Ajax,使用下面的JS将图像设置为背景:

function setUploadedBackground(fileName){
    var ajx;
    if (window.XMLHttpRequest)
    {// If the browser if IE7+[or] Firefox[or] Chrome[or] Opera[or]Safari
        ajx=new XMLHttpRequest();
    }
    else
    {//If browser is IE6, IE5
        ajx=new ActiveXObject("Microsoft.XMLHTTP");
    }
    ajx.onreadystatechange=function()
    {
        if (ajx.readyState==4 && ajx.status==200)
        {
            //change background
        }
    }
    ajx.open("GET","index.jsp",true);
    ajx.send();
    return false;
}
表单“uploadAction”使用以下操作jsp来实际上载和保存文件

<form id= "uploadForm" action="

                    <%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
                    <%@ page import="javax.servlet.http.*" %>
                    <%@ page import="org.apache.commons.fileupload.*" %>
                    <%@ page import="org.apache.commons.fileupload.disk.*" %>
                    <%@ page import="org.apache.commons.fileupload.servlet.*" %>
                    <%@ page import="org.apache.commons.io.output.*" %>

                    <%
                    int uploadFailed = 0;
                    File file ;
                    String fileName = null;
                    int maxFileSize = 500000 * 1024;
                    int maxMemSize = 5000 * 1024;
                    ServletContext context = pageContext.getServletContext();
                    String filePath = context.getInitParameter("file-upload");

                    // Verify the content type
                    String contentType = request.getContentType();
                    //if (contentType.indexOf("multipart/form-data") >= 0) {

                    DiskFileItemFactory factory = new DiskFileItemFactory();
                    // maximum size that will be stored in memory
                    factory.setSizeThreshold(maxMemSize);
                    // Location to save data that is larger than maxMemSize.
                    factory.setRepository(new File("uploads/"));

                    // Create a new file upload handler
                    ServletFileUpload upload = new ServletFileUpload(factory);
                    upload.setHeaderEncoding("ISO-8858-2");

                    // maximum file size to be uploaded.
                    upload.setSizeMax( maxFileSize );
                    try {
                        // Parse the request to get file items.
                        List fileItems = upload.parseRequest(request);

                        // Process the uploaded file items
                        Iterator iter = fileItems.iterator();

                        while ( iter.hasNext () ) {
                            FileItem fi = (FileItem)iter.next();
                            if ( !fi.isFormField () ) {

                                // Get the uploaded file parameters
                                String fieldName = fi.getFieldName();
                                fileName = fi.getName().replaceAll("\\s", "");

                                String mimeType = getServletContext().getMimeType(fi.getName());

                                if(mimeType == null) mimeType = fi.getContentType();
                                if (mimeType.startsWith("image")) {
                                    String command = "update users set mm11='"+fileName+"' where name = 'Gjeta'";
                                    st.executeUpdate(command);

                                    boolean isInMemory = fi.isInMemory();
                                    long sizeInBytes = fi.getSize();

                                    // Write the file
                                    if( fileName.lastIndexOf("\\") >= 0 ) {
                                        file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ;
                                    }
                                    else {
                                            file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ;
                                        }
                                        fi.write( file ) ;
                                    }
                                    else uploadFailed = 2;

                                }
                            }
                        } catch(Exception ex) {
                            System.out.println(ex);
                            if(ex.toString().contains("IOFileUploadException")) uploadFailed = 1;
                        }
                    //}
                    %>"
                        method="post" enctype="multipart/form-data">
                    <input class="uploads" type="file" name="file" size="50"/>
                    <input class="uploadFile" type="submit" value="Upload File"/>
                    <script type="text/javascript">
                        <% if (uploadFailed == 0) { %>
                        setUploadedBackground('<%=fileName%>');
                        <% } else if (uploadFailed == 1) { %>
                                alert("Maximum file size exceeded");
                                <% } else if (uploadFailed == 2) { %>
                                        alert("Please upload an image");
                                    <% } %>

                    </script>
                </form>
我知道问题在于上传文件时,上传表单实质上会重定向到操作页面,尽管我使用Ajax将上传的图像设置为容器div的背景,但事实上我没有使用

event.preventDefault();
就我所知,这意味着表单提交会导致重定向。我尝试过使用与我的nameBoardForm使用的逻辑相同的逻辑,即使用jQuery来更改提交时发生的情况,但我无法使用serialize()获取所需的文件名参数,因为这似乎只是为文件输入表单返回一个空字符串(即使它对文本输入表单非常有效)

我有什么办法可以绕开这件事吗?目前,如果用户上传图像,则将其设置为div背景,然后他们还可以使用Ajax将拼贴标题从“无标题”更改为自己的拼贴名称,而不影响上传的div图像/背景。但是,如果用户先设置拼贴名称,则在上传图像并设置为背景时,拼贴标题重置为“无标题”,因此用户会丢失他们已经输入的数据

最终的想法是,我将把文件名保存到拼贴标题下的数据库中,这样用户就可以根据以前使用过的标题搜索拼贴,并根据以前上传的图像重新显示拼贴。然而,这意味着拼贴标题的数据输入是至关重要的,因此不能通过Ajax将图像设置为div背景来擦除-有什么建议吗?我在谷歌上搜索解决方案已经很久了,但似乎文件输入表单很奇怪,我还没有发现任何有用的东西

编辑-----------------------

生成的HTML为:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Testing</title>
        <script src="js/jquery-1.8.1.min.js" type="text/javascript" language="javascript"></script>
        <script src="js/setUploadedBackground.js" type="text/javascript" language="javascript"></script>
        <script src="js/enableButton.js" type="text/javascript" language="javascript"></script>

        <!--script src="params.js" type="text/javascript"></script-->

        <link href="css/newstyle.css" rel="stylesheet" type="text/css" />
    </head>
    <body>            
        <h3 id="title"><div class="collageTitle">Untitled</div></h3>

        <form id = "nameBoardForm" method="post">
            <input type='text' name='collageName' id='collageNameInput' />
            <input type='submit' name='submit' id='submitBtn' value="Save collage" class='enableOnInput' disabled='disabled' />
        </form>

        <div id="uploadsContainer" class="mm11Container" style="top:100px; left: 300px;">
            <div id="img" class="mm11 card front face">
                <form id= "uploadForm" action=""
                    method="post" enctype="multipart/form-data">
                    <input class="uploads" type="file" name="file" size="50"/>
                    <input class="uploadFile" type="submit" value="Upload File"/>
                    <script type="text/javascript">
                        <% if (uploadFailed == 0) { %>
                        setUploadedBackground('<%=fileName%>');
                        <% } else if (uploadFailed == 1) { %>
                                alert("Maximum file size exceeded");
                                <% } else if (uploadFailed == 2) { %>
                                        alert("Please upload an image");
                                    <% } %>

                    </script>
                </form>
            </div>
        </div>
        <script src="testing.js" type="text/javascript"></script>
    </body>
</html>

测试
无标题
setUploadedBackground(“”);
警报(“超过最大文件大小”);
提醒(“请上传图片”);

您最好发布生成的HTML而不是jsp源代码。我已经编辑了我的问题,将其包括在内
event.preventDefault();
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Testing</title>
        <script src="js/jquery-1.8.1.min.js" type="text/javascript" language="javascript"></script>
        <script src="js/setUploadedBackground.js" type="text/javascript" language="javascript"></script>
        <script src="js/enableButton.js" type="text/javascript" language="javascript"></script>

        <!--script src="params.js" type="text/javascript"></script-->

        <link href="css/newstyle.css" rel="stylesheet" type="text/css" />
    </head>
    <body>            
        <h3 id="title"><div class="collageTitle">Untitled</div></h3>

        <form id = "nameBoardForm" method="post">
            <input type='text' name='collageName' id='collageNameInput' />
            <input type='submit' name='submit' id='submitBtn' value="Save collage" class='enableOnInput' disabled='disabled' />
        </form>

        <div id="uploadsContainer" class="mm11Container" style="top:100px; left: 300px;">
            <div id="img" class="mm11 card front face">
                <form id= "uploadForm" action=""
                    method="post" enctype="multipart/form-data">
                    <input class="uploads" type="file" name="file" size="50"/>
                    <input class="uploadFile" type="submit" value="Upload File"/>
                    <script type="text/javascript">
                        <% if (uploadFailed == 0) { %>
                        setUploadedBackground('<%=fileName%>');
                        <% } else if (uploadFailed == 1) { %>
                                alert("Maximum file size exceeded");
                                <% } else if (uploadFailed == 2) { %>
                                        alert("Please upload an image");
                                    <% } %>

                    </script>
                </form>
            </div>
        </div>
        <script src="testing.js" type="text/javascript"></script>
    </body>
</html>