2015-04-02 49 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。