小编典典

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

ajax

我试图使用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);
  }                         
});

但是,它开始error运行并显示警报:

未成功:未找到

这是怎么引起的,我该如何解决?


阅读 284

收藏
2020-07-26

共1个答案

小编典典

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

您告诉您的servlet在以下位置可用:

http:// localhost:8080 / FullcalendarProject /
CheckingAjax

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

http:// localhost:8080 / FullcalendarProject / pages /
some.jsp

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

http:// localhost:8080 / FullcalendarProject / pages /
CheckingAjax

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

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

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

这不是便携式的。每次将Web应用程序移至另一个域时,都需要对其进行编辑。您无法从webapp内部进行控制。

  1. url: "/FullcalendarProject/CheckingAjax"

这也不是真正可移植的。每次更改上下文路径时,都需要对其进行编辑。您无法从webapp内部进行控制。

  1. url: "../CheckingAjax"

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

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

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

或者将其封装在自己的JS文件中(好的做法!),然后创建一个全局JS变量:

    <script>var contextPath = "${pageContext.request.contextPath}";</script>
<script src="yourajax.js"></script>

url: contextPath + "/CheckingAjax"

或document元素上的HTML5数据属性:

    <html data-contextPath="${pageContext.request.contextPath}">
    <head>
        <script src="yourajax.js"></script>

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

2020-07-26