【发布时间】:2013-09-13 22:45:21
【问题描述】:
我需要在 服务器 中保留我的请求,直到新数据到来。我使用 Tomcat 6 作为我的网络服务器。这是我的 JQuery 代码,
function sendMessage() {
var message = $("#message").val();
$.ajax({
type: "POST",
cache: false,
url: "sendMessage.html",
data: "message=" + message,
dataType: "html",
success: function(response) {
},
error: function(e) {
//alert('Error: ' + e);
},
});
}
function startLongPolling(){
$.ajax({
type: "POST",
cache: false,
url: "LongPoll.html",
dataType: "html",
success: function(response) {
if(response != null && response !="" && response !="null")
$("#sucess").html(response);
},
error: function(e) {
//alert('Error: ' + e);
},
complete: function(e) {
startLongPolling();
},
});
}
我的 java 代码将是,
@RequestMapping(value = "LongPoll.html", method=RequestMethod.POST )
public @ResponseBody String longLongPolling(HttpSession session) {
String sessionId = session.getId().toString();
AgentState agentState = ApplicaionManager.agentDetail.get(sessionId);
String message = null;
if(ApplicaionManager.agentDetail.containsKey(sessionId)){
while(true){
if(agentState.isStateChange() == true){
message = agentState.getMessage();
if(message != null)
agentState.setStateChange(false);
System.out.println("Break for session "+sessionId+" due to Agent State changed");
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println("While exited for session"+sessionId);
return message;
}
但每 11 秒 会有一个continous request sent to server。我不知道怎么可能。我已使用 chrome 开发者工具对此进行了检查。
希望我们的堆栈用户能帮助我。
【问题讨论】:
-
它是否在控制台中打印“Break for session..”?
-
I 状态的任何变化意味着,它会打印“Break for session..”。
-
请粘贴完整的jquery代码
-
@UVM 。我更新了我的代码。请检查一下。
-
您的请求可能超时。 jQuery 没有设置默认超时值,但您的浏览器、操作系统或服务器可能有。
标签: java jquery spring google-chrome-devtools long-polling