为什么jquery $ .get函数不调用java servlet?

时间:2017-09-04 08:08:06

标签: jquery ajax servlet-3.0

我想在jquery中用ajax调用这个servlet:

@WebServlet("/getCoursesForSubject")
public class GetCoursesForSubjectServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public GetCoursesForSubjectServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
...........

在jsp页面中,我有这个jquery代码来调用ajax请求:

$("#subjectSelect").change(function(){
        var name = $("#subjectSelect option:selected").text();
        alert("change handler is called "+name);
        $.get("/getCoursesForSubject",{"subjectName":name},function(responseJson){
            $.each(responseJson,function(index,course){
                alert(course);
                $("<option>").appendTo($("#courseSelect")).text(course.courseDescriptionName);
            });
        });
    });

调用change方法并正确显示警告:

alert("change handler is called "+name);

但接下来我希望调用路径/getCoursesForSubject上的java servlet,但事实并非如此。

在Google Chrome控制台中,我收到此错误:

GET http://localhost:8080/getCoursesForSubject?subjectName=AS%20-%20Aerospace%20Studies%22 404 ()

这意味着已进行了ajax调用,但服务器返回了404错误。

通过将contextPath提供给网址,已解决。正确的$.get方法是:

$.get("${pageContext.request.contextPath}/getCoursesForSubject",{"subjectName":name},function(responseJson){
            $.each(responseJson,function(index,course){
                alert(course);
                $("<option>").appendTo($("#courseSelect")).text(course.courseDescriptionName);
            });
        });

1 个答案:

答案 0 :(得分:0)

您也可以使用

request.getServletContext()

如果您不使用JSTL。

使用$.get()方法,确保servlet具有get方法。

使用$.post() servlet应该包含post方法。