在java中加载效果

时间:2011-12-09 10:22:29

标签: javascript

我有两个jsp页面和一个servlet。当用户单击提交按钮时,处理在servlet中完成,然后结果转到另一个jsp页面,以便用户看到他的结果。但我想显示一个加载gif,以便gif将运行直到用户获得他的结果,如果在中期用户停止浏览器加载然后自动gif也将停止,如何做?在javascript或其他只有用户会看到gif图片,但当用户将停止浏览器的处理仍然是gif正在运行,这不应该发生。我怎么解决这个问题?

index.jsp ---------------转到servlet ------------ result.jsp

6 个答案:

答案 0 :(得分:2)

由于所有这些都将在用户的浏览器中发生,因此解决方案不能使用Java,它必须是JavaScript,才能对onabort事件做出反应。

至于停止GIF动画,这是不可能的(除了nasty hacks之外)。我建议使用JavaScript(例如jQuery builtins或plugins)来制作动画。

更新:第二个想法,为什么你认为你需要做任何事情?如果浏览器没有加载,那就是他们自己的错,浏览器已经有了一个完全符合你想要的加载动画。为什么重复这个?

答案 1 :(得分:1)

这不是Java特有的,因为一切都将在浏览器中发生。在发出请求之前,您可能需要一些JavaScript来打开该弹出窗口,并注册一个关闭window.onabort弹出窗口的事件处理程序。

答案 2 :(得分:1)

试试这个

function doWork() {
  //start loading gif
  $.ajax({
        'type': 'POST',
        'cache': false,
        'contentType': 'application/x-www-form-urlencoded; charset=UTF-8',
        'url': #your_servlet_url#,
        'data': $('form#' + #your_form_id#).serialize(),
        success: function (data) {//data can be json or plain HTML depending on your scenario
            // stop the loading gif
            //redirect to result.jsp if you need to redirect user to completely new page with 'data' received
            // or just send the result.jsp with processed data from the servlet and load the content 'data'
            // received above in  some div on index.jsp
        },
        error: function (xhr, status, err) {  
            //request cancelled by user or due to any other reason such timeout
            if (xhr.status == 0) {
                //stop the loading gif
            }
            // you can handle other errors(401,403 etc) too by examining xhr, status and err objects
        }
  });
}

答案 3 :(得分:1)

我能想到的两件事:

  • 在提交时只显示gif。我检查过的所有浏览器都不会更改当前页面,直到收到第二个结果。

  • 使用ajax(jQuery)来显示结果。然后,您可以使用ajax activity indicator

答案 4 :(得分:0)

jQuery JavaScript库可能会提供一些不错的进展效果。 对于未来:HTML5有一个进度条等。 使用Ajax可能会导致(在DIV中加载时回调)。

答案 5 :(得分:0)

一个非常粗略的解决方案是使用ajax来提交表单。您可以在提交时显示加载GIF,并在收到响应后立即更新页面并删除gif。 Jquery ajax方法将能够处理用户的中止,这将使您能够编写逻辑以删除gif(例如,在中止的情况下在页面上进行任何其他处理)

其他可能性是你使用像struts(2.0)这样的框架。这给出了一个等待和执行拦截器,特别是为了这种目的(在处理请求时显示中间页面)