当前位置: 代码迷 >> J2EE >> ajax 请求,后盾向前台传完值(render)后,后台若还有代码,会继续执行吗
  详细解决方案

ajax 请求,后盾向前台传完值(render)后,后台若还有代码,会继续执行吗

热度:337   发布时间:2016-04-17 23:16:32.0
ajax 请求,后台向前台传完值(render)后,后台若还有代码,会继续执行吗?
本帖最后由 I_am_a_java_CaiNiao 于 2015-03-25 17:36:28 编辑
看如下代码。场景为:前端发起一个 ajax 请求至后端,后端接收请求,通过远程调用其他系统获取数据,然后将数据响应给前端。在这个过程中,我希望后端能将获取的数据存入本地库(saveData)。那么如果我这个saveData方法写在“后端响应给前端(render)之后,”,saveData一定会执行吗?哪怕执行耗时很长?假如前端用户已经在点击其他请求了呢?

谢谢!!


       public void ajaxTest(...) {
                Object data = getData(); // 此处为以某种方式(如远程)获取数据

                saveData(data); // 此处将获得的数据入库

                renderJSON(response, data); // 将数据响应给前段 ajax 请求

                saveData(data); // 这句一定会执行吗?如果会,那么假设该句耗时较久,写在 renderJSON之后,相比写在renderJSON之前而言,更有利于前端响应速度?
        }


/**
 * 将JSON对象写入http响应流
 * 
 * @param response http响应
 * @param obj JSON对象
 */
public static void renderJSON(HttpServletResponse response, Object obj) {

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = null;
try {
out = response.getWriter();
out.print(JSONMapper.toJSON(obj).render(false));
} catch (MapperException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != out) {
out.close();
}
}
}

------解决思路----------------------
saveData(data); // 这句一定会执行

如果不依赖存储结果,这个操作又很耗时,放后面是明智的选择。
------解决思路----------------------
renderJSON捕获了CheckedException类异常,出现此种异常及不抛出异常时都执行savedata。
但是没有捕获RuntimeException类异常,此时将跳出,不执行savedata操作。
  相关解决方案