【问题标题】:Ajax call finished before Java Thread finished executing taskAjax 调用在 Java 线程完成执行任务之前完成
【发布时间】:2017-07-02 13:38:40
【问题描述】:

这就是现在发生的事情

  1. 我用jquery Ajax调用Server端Servlet代码

  2. Servlet 代码使用线程从远程位置读取属性文件并将其写入 Servlet 响应对象。

  3. Ajax 调用在启动线程时完成。

我希望 Ajax 调用等待线程完成其任务。我尝试使用 JQuery when 方法但它没有被调用(使用 jquery 版本 2+)。

  $.when(loadProperty()).done(function(a1){
    alert('load proeprty finished  :'+a1);
});

function loadProperty(){
	  var webappName = $('#webapps').val();
	  var proeprty_type = $( "#property_type option:selected" ).text();
	  $("#property_table").empty();
	  $.ajax({
          url: "UDEPropertyManager?mode=getProperty",
          dataType: "json",
          type: "POST",
          contentType: "application/json; charset=utf-8",
          dataFilter: function(data) { return data; },
          success: function(data) {
          
					}
				});
				
			}
			
			

			

【问题讨论】:

  • 你是否为 ajax 调用设置了 async: false ??
  • A.您的函数不返回任何内容。 B. 固定点 A 后,您将不再需要 when
  • 为什么在 Servlet 上启动新线程时 Ajax 调用结束?
  • 希望你已经尝试过这个选项,在进行 ajax 调用时:async: false,

标签: javascript jquery ajax multithreading servlets


【解决方案1】:

同样,永远不要直接在 servlet 中运行线程,在你的情况下这是完全没有意义的。

新线程意味着,新工作应该异步启动。这意味着当您运行一个 nw 线程时,servlet 会继续其工作并响应客户端,这可能比新线程初始化更快。

您不能为这种情况运行新线程。

如果结果/消息已准备好,请尽快回复,客户会收到。

您可以阅读有关 servlet 上下文和线程的更多信息。不能简单地在 servlet 上下文中以这种方式运行线程

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2020-10-31
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多