如何从jQuery $ .ajax调用servlet而不会出现HTTP 404错误

MMM*_*MMS 2 ajax url jquery servlets http-status-code-404

我试图使用ajax调用调用servlet,如下所示:

$.ajax({
  url: 'CheckingAjax',
  type: 'GET',
  data: { field1: "hello", field2 : "hello2"} ,
  contentType: 'application/json; charset=utf-8',
  success: function (response) {
    //your success code
    alert("success");
  },
  error: function (errorThrown) {
    //your error code
    alert("not success :"+errorThrown);
  }                         
});
Run Code Online (Sandbox Code Playgroud)

但是,它会error起作用并显示警报:

没有成功:没找到

这是怎么造成的,我该如何解决?

Bal*_*usC 5

当您指定相对URL(不以scheme或开头的URL /)时,它将相对于当前请求URL(您在浏览器的地址栏中看到的URL).

您告诉您的servlet可用于:

HTTP://本地主机:8080/FullcalendarProject/CheckingAjax

想象一下,运行ajax脚本的网页是通过以下方式打开的:

HTTP://本地主机:8080/FullcalendarProject /页/ some.jsp

并指定相对URL url: "CheckingAjax",然后将其解释为:

HTTP://本地主机:8080/FullcalendarProject /页/ CheckingAjax

但这不存在.因此,它将返回HTTP 404"找不到页面"错误.

为了使其工作,您基本上需要使用以下方法之一指定URL:

  1. url: "http://localhost:8080/FullcalendarProject/CheckingAjax"

    这不便携.每次将webapp移动到另一个域时,都需要对其进行编辑.您无法从webapp内部控制此操作.

  2. url: "/FullcalendarProject/CheckingAjax"

    这也不是真正的便携式.每次更改上下文路径时都需要编辑它.您无法从webapp内部控制此操作.

  3. url: "../CheckingAjax"

    这实际上也是不可移植的,尽管您可以从webapp内部完全控制它.每次将JSP移动到另一个文件夹时,您都需要对其进行编辑,但如果您正在使用JSP,那么您基本上已经忙于编码,因此可以轻松地同时完成.

  4. 最好的方法是让JSP EL动态打印当前的请求上下文路径.假设JS代码包含在JSP文件中:

    url: "${pageContext.request.contextPath}/CheckingAjax"

    或者当它被包含在自己的JS文件中时(好的做法!),然后创建一个全局JS变量:

    <script>var contextPath = "${pageContext.request.contextPath}";</script>
    <script src="yourajax.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)

    url: contextPath + "/CheckingAjax"

    或文档元素上的HTML5数据属性:

    <html data-contextPath="${pageContext.request.contextPath}">
        <head>
            <script src="yourajax.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)

    url: $("html").data("contextPath") + "/CheckingAjax"