通过一个请求在javascript中接收多个响应

时间:2015-07-24 11:21:58

标签: javascript java websocket

如何使用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];

            }
    }
}

我不能修改这种方法。是否可以使用XmlHttp对象完成它。

2 个答案:

答案 0 :(得分:1)

只有'基本的javascript'你不能这样做。

它的工作原理如下:客户端发送请求,服务器返回'某事'。由于多种原因,服务器不能简单地将数据发送回此客户端。答:除了请求的第一个“呼叫”之外,双方之间没有“链接”即连接,但客户端只是等待响应。 B:脚本不希望得到其他答案。

你需要的是一个websocket例如。这样,客户端可以监听服务器并实际处理从服务器发送到客户端的数据。

简而言之:

Javascript的工作原理如下:

客户 - >服务器|并且服务器回复

对于插座,您可以:

客户 - >服务器 服务器 - >客户端

你可以使用某种“javascript”甚至是一种不同的技术......比如NodeJS。

另一种方法是制作一个循环。不是发布具有大量迭代的数据集,而是在JS中迭代它,并且每次迭代都将其发送到服务器以实际“执行”您的数据。

答案 1 :(得分:1)

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 documentation的东西,它是techonolgy,其中一个连接有多个请求和响应(全双工连接流)。

  

您还需要其他服务器控制器实现,并参阅websocket supported browsers

     

注意ws:这是WebSocket连接的新URL模式。   还有wss:对于安全的WebSocket连接,方式与https相同:   用于安全的HTTP连接

     

我只注意到"示例"附带的网络应用程序   Tomcat 7包含4个完整的如何使用WebSocket的示例(适用于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);
    };