【问题标题】:How to call servlet from jQuery $.ajax without getting HTTP 404 error如何从 jQuery $.ajax 调用 servlet 而不会出现 HTTP 404 错误
【发布时间】:2015-07-22 19:10:56
【问题描述】:

我正在尝试使用 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 函数并显示警报:

不成功:未找到

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

【问题讨论】:

  • 错误代码是什么?请求是否到达服务器?浏览器开发者工具(网络标签)显示什么?
  • @Thilo 错误抛出“未找到”并且请求未到达服务器。
  • 您确定网址正确吗?当您将 URL 直接输入到地址栏中(或将其卷曲)时会发生什么?
  • @Thilo localhost:8080/FullcalendarProject/CheckingAjax 这是我在地址栏中的 servlet url。它在地址栏中工作
  • 在进行 ajax 调用之前的 url 是什么?我只是想看看使用的相对url是否正确

标签: jquery ajax url servlets http-status-code-404


【解决方案1】:

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

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

http://localhost:8080/FullcalendarProject/CheckingAjax

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

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

而你指定了相对URLurl: "CheckingAjax",那么它将被解释为:

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

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

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

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

    这不是便携式的。每次将 web 应用程序移动到另一个域时,您都需要对其进行编辑。你无法从 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>
    

    url: contextPath + "/CheckingAjax"

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

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

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

【讨论】:

  • 为什么在 apache 中通过 mod_proxy 后这不起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2015-08-04
  • 2018-02-01
  • 2012-07-03
  • 2012-02-24
  • 1970-01-01
相关资源
最近更新 更多