2012-01-10 3 views
1

У меня есть запрос Ajax, исходящий с клиентской стороны после нажатия клавиши. Сервлет возвращает строку.Как получить ответ Ajax от сервлета?

Как мне взять эту строку на стороне клиента? Он должен быть разделен на "," на стороне клиента и отображать список. Мы используем Velocity для рендеринга HTML.

код сервлета:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    String acInfo = request.getQueryString(); 
    SomeDAO dao = new SomeDAO(); 
    ArrayList<String> results = dao.acResults(acInfo); 
    StringBuilder sb = new StringBuilder(); 
    int count = 0; 
    for (String acResult : results) { 
     sb.append(acResult); 
     count++; 
     if (count == results.size()) { 
      break; 
     } 
     sb.append(','); 
    } 
    out.println(sb); 
    out.close(); 
} 
+0

из Результат запроса Ajax? Это зависит от того, как вы делаете запрос (надеюсь, не используя необработанный JavaScript). –

+0

@dave Newton Запрос, отправленный с ui, представляет собой простую строку типа «li», я не создаю никаких запросов. Что вы подразумеваете под сырым Javascript? – pushya

+0

@DaveNewton мы используем jQuery в интерфейсе – pushya

ответ

2

Не используйте «асинхронный: ложный» или он потеряет все значение AJAX. Сделайте все, что захотите, в методе успеха. Для того, чтобы разделить на «», просто использовать раскол() и легко перебирать массивы используют $ .each()

$.ajax({ type: "GET", 
    url: "/YourServletURL", 
    success : function(text) 
    { 
     var list = text.split(','); 
     $.each(list, function(index, value) { 
      alert(index + ': ' + value); 
     }); 
     // This will show the values. Change "alert" for $('div#mydiv').html(value) or so 
    } 
}); 
-1

Похоже, простой сценарий ответа Ajax JQuery - вы не можете обработать ответ с кодом следующего характера?

var responseText = ''; 
$.ajax({ type: "GET", 
     url: "/YourServletURL", 
     success : function(text) 
     { 
      responseText = text; 
     } 
}); 

//alert response or process it or display somewhere 
alert(responseText); 
+0

Да, я могу. спасибо – pushya

+0

@pushya Обратите внимание, что этот код скорее всего не то, что вы хотите, так как он асинхронный и не является каноническим шаблоном Ajax/jQuery. Использование этого в качестве примера порождает вредные привычки. –

+0

@DaveNewton: вы, возможно, хотели сказать «так как это синхронно»? – BalusC

0

Если вы не используете Jquery, то вы можете использовать следующие:

<html> 
<head> 
<script type="text/javascript"> 
function loadXMLDoc() 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
  } 
    } 
xmlhttp.open("GET","YOUR_SERVLET_RELATIVE_URL",true); 
xmlhttp.send(); 
} 
</script> 
</head> 
<body> 

<h2>AJAX</h2> 
<button type="button" onclick="loadXMLDoc()">Request data</button> 
<div id="myDiv"></div> 

</body> 
</html> 
Смежные вопросы