2017-01-17 6 views
-2

Я вызываю свой Java-сервлет с вызовом AJAX, но я не могу прочитать входной параметр из запроса. Я пытался два пути, но не повезло:Ajax вызов сервлета, получить параметр

var id; 
$("#scan").click(function() { 
    id = 1; 
    $.ajax({ 
     type: "POST", 
     data: id, 
     url: "http://10.1.42.249:8080/test-notifier-web/RestLayer" 
    }); 
}); 

И:

id = 1; 
$.post('http://10.1.42.249:8080/test-notifier-web/RestLayer', { 
    reqValue: id 
}, function(responseText) { 
    // $('#welcometext').text(responseText); 
    alert("OK!!!"); 
}); 

Мой сервлет код простой журнал печати параметра запроса, но возвращаемое значение всегда нуль:

String reqID = ""; 
log.info("Servlet called"); 
reqID = request.getParameter("reqValue"); 
log.info("reqID = " + reqID); 

Как я могу заставить это работать?

Единственный способ я нашел, чтобы получить код работать вручную добавить параметр адреса сервлета, как http://10.1.42.249:8080/test-notifier-web/RestLayer?reqValue=1

+1

Ваш второй пример использования '$ .post' должен работать. У вас есть ошибки в консоли? –

+0

вы проверяете, что ваш сервлет называется или нет? –

+0

Проверьте, поддерживает ли ваш сервлет HTTP POST. Я имею в виду, что у вас есть «doPost» в вашем сервлете? – vijayP

ответ

2

Я проверил вас код. Это мой рабочий код.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
<script 
    src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 

<script type="text/javascript"> 
    var id; 

    function fun() { 
     alert("aaaa"); 
     id = 1; 

     $.ajax({ 
      type : "POST", 
      data : { 
       reqValue : id 
      }, 
      url : "/WebProject/callAjax" 
     }); 
    } 
</script> 
</head> 
<body> 
    <button id="scan" onclick="fun()">Sacn</button> 
</body> 
</html> 

// Servlet

@WebServlet(urlPatterns = {"/callAjax",}) 
public class Test extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doPost(request, response); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     System.out.println(request.getParameter("reqValue")); 
    } 

} 
+0

Работа для меня тоже. Спасибо! – slash89mf

0
var id; 

$("#scan").click(function() { 

     id = 1; 

     $.ajax({ 
      type: "POST", 
      data: { reqValue : id}, 
      url: "http://10.1.42.249:8080/test-notifier-web/RestLayer" 
     }); 
}); 

Существуют различные методы, которые необходимо переопределить в сервлет. Это doPost(), doGet(), service() и т. Д.

Я подозреваю, что вы используете метод doGet(), поэтому, когда вы добавляете параметр в URL-адрес, ваш Java-код работает, а в других двух случаях, поскольку вы используют type : "POST" Код java не может прочитать данные из органа запроса (в методе post данные будут добавлены в Тело запроса).

Я предлагаю вам использовать doPost() или service() методы вместо doGet().