Я пытаюсь создать SQL-запрос на основе AJAX с помощью Java EE и сервлетов.Я использую Glassfish 3.01 и сервер MS SQL с Jquery на стороне клиента.Я собрал все вместе и связал свою функцию ajax с событием onkeyup текстового поля.Но иногда, когда я помещаю «testtring» в текстовое поле, сервлету передается только «testtrin»Таким образом, в основном последний символ исчезает, и поэтому результат запроса не является правильным.Не говоря уже о том, что когда набор результатов содержит большой объем данных, запрос выполняется довольно медленно.Не могли бы вы проверить, если я делаю что-то не так на стороне сервера и клиента?
На стороне клиента у меня есть эта функция JQuery:
function ajaxSearch(sstring) {</p>
<p>if (sstring.length < 3)
{
$("#external").html("<p>at least 3 chars please....</p>")
}
else
{
$('#loading').ajaxStart(function() {
$(this).show()
$("#external").hide()
});</p>
<pre><code>$('#loading').ajaxComplete(function() {
$(this).hide()
$("#external").show()
});
$.ajax({
type:"GET",
url: "/myApp/getStd",
dataType: "application/x-www-form-urlencoded",
data: "sstring="+escape(sstring),
async: true,
success: function(data){
$("#external").html(data);
}
})
</code>
}}
На стороне сервера у меня есть это:
@WebServlet (name = "getStd",urlPatterns = {"/ getStd"}) открытый класс getStd расширяет HttpServlet {@Override public void doGet (HttpServletRequest req, HttpServletResponse res) создает ServletException, IOException {Connection conn = null;Заявление stmt = null;ResultSet rs = null;ArrayList rows = new ArrayList ();res.setCharacterEncoding ( "UTF-8");res.setContentType ( "текст / html");PrintWriter out = res.getWriter ();Строка sql = null;String test = req.getParameter ("sstring");try {InitialContext cxt = new InitialContext ();if (cxt == null) {выбросить новое исключение ("Ой, нет контекста!");} DataSource ds = (DataSource) cxt.lookup ("jdbc / Sample");conn = ds.getConnection ();stmt = conn.createStatement ();sql = "Выбрать * из MYDB.dbo.testdb, где myField похож на '%" + req.getParameter ("sstring") + "%';";rs = stmt.executeQuery (sql);while (rs.next ()) {stdRecord cols = new stdRecord ();cols.setTeljel (rs.getString ( "Field1"));cols.setTitle (rs.getString ( "Field2"));cols.setICS (rs.getString ( "Field3"));cols.setREF (rs.getString ( "Field4"));rows.add (смещ_по_столбцы);} req.setAttribute ("std", строки);req.setAttribute («запрос», тест);req.getRequestDispatcher ("/ showRes.jsp"). forward (req, res);// закрываем все, чтобы освободить ресурсы rs.close ();rs = ноль;stmt.close ();stmt = ноль;conn.Close ();/ conn = ноль;строки = NULL;} catch (SQLException e) {e.printStackTrace (out);} catch (Exception e) {e.printStackTrace (out);} наконец {if (rs! = null) {try {rs.close ();} catch (SQLException e) {;} rs = null;} if (stmt! = null) {try {stmt.close ();} catch (SQLException e) {;} stmt = null;} if (conn! = null) {try {conn.close ();} catch (SQLException e) {;} conn = null;}}}}
Заранее спасибо.