2015-04-02 55 views
0

在我的网站我使用Ajax来发布信息到Java servlet和使用下面的JavaScript代码读取响应:如何区分javascript中的servlet响应?

  $.ajax({ 
      url : 'myfirstservlet', 
      async: false, 
      data : { 
         //send info.. 
        }, 

      success : function(responseText) { 

       //receive response.. 
      } 
     }); 

而且在我的servlet我是回多个响应。例如:

String response1 = "response1"; 
    int response2 = "5"; 
    out.println(response1); 
    out.println(response2); 

那么如何获得这两个不同响应的值并将它们放在单独的javascript变量中呢?

例如

$var response1 = ['response1']; 
$var response2 = ['response2']; 

谢谢:)

回答

2

如果out是responsewriter,你的输出将

response1 
5 

一个更好的方法是创建一个JSON对象,而不是纯文本。

{ 
    "res1":"response1", 
    "res2":"5" 
} 
+0

Json可能是这样写的方式+1但是相反,我用逗号分隔了值,并以这种方式得到了它们。 – 2015-04-03 10:27:52

+0

也是一个不错的选择,预计“repsonse1”可能会包含一个逗号。 – 2015-04-03 10:46:26

+0

我的例子中的第一个回应将是恒定的,例如out.println(“Positive”,+ sum);并在我的JavaScript我有:var $ split = responseText.split(',');.它工作得很好。 – 2015-04-03 13:00:41

0

你想在单个响应中响应两个不同的数据。按照HTTP,你不能有两个响应。

您可以通过使用Json或正确删除数据来做到这一点。

  • 如果这种反应是那么简单的字符串去delimation方法 不要使用“”作为delimater如果字符串甚至远程可能包含逗号。具有多个卡拉器的斩光器会做。 '#Delem#'
  • 如果数据比较复杂,即对象结构与灌溉和constitutuin然后去JSON。
0

我认为我们已经过度复杂化了。

HTTP中没有这样的事情作为请求的多重响应。客户端发出请求,服务器发送回应。您显示的代码不会发送多个回复。它发送一个响应,其中只有2个有趣的数据。

由于您使用的是println,因此您的输出按行定义为线分隔。因此,在您的客户端代码中,将响应分割为CRLF。

var parts = response.split(/\r?\n/); 
var part1 = parts[0]; 
var part2 = parts[1]; 

如果你正在传送的数据是如此简单,也不可能成长,这是好的。如果你想要一个更具扩展性的解决方案,我推荐使用JSON。