如何使用javascript从服务器接收多个响应。
我有一个需求,其中一个请求是一次性发布的数据和迭代次数,在服务器端处理请求的迭代次数。在每次迭代完成时,服务器发送回响应。因此,对于一个请求和10次迭代,我的java脚本需要接收10个响应并将其显示在网页上。是否有任何方法,我可以处理这个使用javascript。我不能使用任何其他技术。
现在我正在使用下面的方法
function showResponse(){
xmlHttp = GetXmlHttpObject();
var dataString = document.getElementById("request-parameters").value;
var iterations = document.getElementById("iterations").value;
if(xmlHttp==null){
alert("your browser does not support AJAX!");
}
var url = "http://localhost:8080/servlet/requestServlet";
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,true);
xmlHttp.send(dataString);
}
function GetXmlHttpObject(){
var xmlHttp=null;
try{
//Firefox, Opera, Safari
xmlHttp=new XMLHttpRequest();
}catch(e){
//IE
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
function stateChanged(){
if(xmlHttp.readyState==4){
if(xmlHttp.status == 200){
var resp = xmlHttp.responseText;
var responseDiv = document.getElementById("response");
responseDiv.innerHTML=responseDiv.innerHTML+resp1[1];
}
}
}
我不能修改这个方法。
仅使用'basic javascript'您无法做到这一点。
它的工作原理是这样的:客户端发送请求,服务器返回'某事'。由于多种原因,服务器不能简单地将数据发送回该客户机。答:除了请求的第一个"调用"之外,双方之间没有"链接",但客户端只是等待响应。B:剧本不指望别人回复。
例如,你需要的是一个websocket。通过这种方式,客户机可以监听服务器并实际处理从服务器发送到客户机的数据。简而言之:
Javascript是这样工作的:
客户端->服务器|服务器响应
对于套接字,可以有:
Client -> ServerServer -> Client
你可以使用某种"javascript",即使它是一种不同的技术。像NodeJS。
另一种方法是创建一个循环。与其发布具有大量迭代的数据集,不如在JS中迭代它,并在每次迭代中将其发送到服务器以实际"执行"数据。
1) HTTP
尝试请求一次到一个控制器,然后从其他控制器得到答案,您可以使用jQuery或原生XmlHttpRequest(它不是一个请求)。
$.get("server/controllerJob",{data:"data"});
var askInterval = window.setInterval(function(){
$.get("server/askAnswerFromJob",{data:"data"}).done(function( data ) {
if(data.complete){
/** do staff**/
window.clearInterval(askInterval);
}else{
/** do staff**/
}
});
},200);
2) webSocket
或者试着找一些关于WebSocket的文档,WebSocket是一个连接多个请求和响应(全双工连接流)的技术。
您还需要其他服务器控制器实现,请参阅websocket支持浏览器
注意ws:。这是WebSocket连接的新URL模式。也有wss:安全WebSocket连接相同的方式https:用于安全HTTP连接
我只是注意到附带的"示例"web应用程序Tomcat 7包含了关于如何使用WebSocket的4个完整示例(针对java开发人员)
var connection = new WebSocket('ws://server/yourService',['soap','xmpp']);
connection.onopen = function () {
connection.send('ask'); // Send the message to server
};
//Each time on new messages from server, this callbacks will be executed (depends on result)
// Log errors from server
connection.onerror = function (error) {
console.log('WebSocket Error ' + error);
};
// Get messages from the server
connection.onmessage = function (e) {
console.log('Answer: ' + e.data);
};