2015-04-02 2 views
0

В моем сайте я использую Ajax для размещения информации в Java Servlet и прочитать ответ, используя следующий код яваскрипта:Как отличить ответы сервлета от javascript?

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

      success : function(responseText) { 

       //receive response.. 
      } 
     }); 

И в моем сервлете я возвращаю несколько ответов. например:

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

Так как я могу получить значение этих двумя различных ответов и поместить их в отдельном яваскрипте переменных?

например.

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

Спасибо :)

ответ

2

Если out является responsewriter, ваш выход будет

response1 
5 

Один лучше было бы создать JSON объект вместо обычного текста.

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

Возможно, Json написал способ пойти так +1 Но вместо этого я разделил значения запятой и получил их таким образом. –

+0

также хороший выбор, ожидайте, что «repsonse1» будет включать запятую. –

+0

Первый ответ в моем случае будет постоянным, например. out.println («Положительная», + сумма); и в моем javascript я: var $ split = responseText.split (',') ;. Это работает очень хорошо. –

0

Что вы хотите ответить двумя разными данными в одном ответе. В соответствии с HTTP вы не можете получить два ответа.

Вы можете сделать это, используя Json или правильно удалив данные.

  • Если этот ответ простые строки затем для метода delimation Не используйте «» в качестве delimater, если строка даже отдаленно может содержать запятые. Делиматор с несколькими карусерами. '# Delem #'
  • Если данные сложны, то структура объекта с помощью aggrigation и constitutuin затем переходит к JSON.
0

Я думаю, что мы слишком усложняем это.

В HTTP нет такой вещи, как несколько ответов на запрос. Клиент делает запрос, и сервер отправляет ответ. Код, который вы показали, не отправляет несколько ответов. Он отправляет единственный ответ, в котором есть только две интересные страницы.

Так как вы используете println, то ваш выход по определению разделяется по линиям. Поэтому в вашем клиентском коде разделите ответ на CRLF.

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

Если данные, которые вы передаете, просты и вряд ли будут расти, это нормально. Если вы хотите более масштабируемое решение, я рекомендую JSON.