ajax调用complete后,Context对象不会更新

时间:2014-11-07 08:01:41

标签: jquery ajax jsp servlets

您好我正在开发动态网络项目。

从jsp页面中选择文件。 ajax被称为。 然后去servlet。 并设置上下文属性。

我添加了示例代码。 如果任何人有一些与如何更新上下文对象相关的想法...使用ajax ...

但上下文对象未更新。

  

JSP页面

<html>
        <script>
        $(document).ready(function(){
            $(':file').change(function(){
                var fileObj = this.files[0];
                var fd = new FormData();    
                fd.append( 'file', fileObj);
                var form = $('#f1');
                alert(<%=context.getAttribute("uploadFile")%>); //false
                $.ajax({
                        url:form.attr('action'),
                        type:form.attr('method'),
                        data:fd,
                        processData: false,
                        contentType: false,
                        async:false,

                    }).done(function(data){
                        alert('ajax complete');
                        //context object is not updated after ajax called...
                        alert(<%=context.getAttribute("uploadFile")%>);  //false  
                        <%context = getServletContext();%>
                        alert(<%=context.getAttribute("uploadFile")%>);   //false

                    });
            });
        });
    </script>
    <form name="f1" id="f1" action="/test" method="post">
        <input type="file"/>
    </form>
</html>
  

Servlet代码

if(ServletFileUpload.isMultipartContent(request)){
                try{
                    List<FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
                    for(FileItem item : multiparts){
                        if(!item.isFormField()){
                            //File upload logic
                        }
                    }
                }catch(Exception ex){
                    ex.printStackTrace();
                }
                context.setAttribute("uploadFile",true);    //set context attribute

1 个答案:

答案 0 :(得分:0)

SerlvetContext是服务器端对象。您的JavaScript在客户端上执行,无法访问它。您需要让Servlet发送某种响应(简单的String,JSON或XML),这些响应将在传递给JQuery函数的数据对象中可用:

.done(function(data){
 alert(data);

});

向Servlet添加一些代码以发送响应:

  public void doPost(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // Set response content type
      response.setContentType("text/html");

      PrintWriter out = response.getWriter();
      out.println("File Uploaded");
  }