2017-09-04 4 views
1

Ich möchte dieses Servlet mit Ajax in Jquery nennen:

@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 { 
........... 

Und ich in jsp Seite haben diese jQuery-Code Ajax-Request aufrufen:

$("#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); 
      }); 
     }); 
    }); 

Die change Methode aufgerufen wird und Alarm wird dsplayed richtig:

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

aber nächstes erwarte ich, dass Java-Servlet auf dem Weg /getCoursesForSubject aufgerufen werden, aber es ist nicht.

In Google Chrome-Konsole bekomme ich diesen Fehler:

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

Das bedeutet, dass Ajax-Aufruf gemacht wurde, aber Server zurückgegeben 404 Fehler.

Es ist gelöst durch Angabe contextPath zu url. Richtig $.get Methode ist:

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

Können Sie auf diese URL direkt in der Browser-Adressleiste zugreifen? – Nitesh

+0

Ich glaube, Sie senden eine Post-Anfrage (da Sie Daten veröffentlichen) Nein? – Sletheren

Antwort

0

Sie auch

request.getServletContext() 

verwenden können, wenn Sie nicht JSTL verwenden.

Mit $.get() Methode, stellen Sie sicher, dass Servlet get Methode hat.

Mit $.post() Servlet sollte post Methode enthalten.