当前位置: 首页 > 面试题库 >

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

李博达
2023-03-14
问题内容

我试图使用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运行并显示警报:

未成功:未找到

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


问题答案:

当您指定相对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"



 类似资料:
  • 问题内容: 我试图从jQuery的.ajax()函数调用servlet。 目前,我认为我什至没有在调用servlet或将参数传递给它,但是许多Googling似乎并没有帮助。有任何想法吗? 这是我的html: 邮件加载 还有我的web.xml Servlet只是目前的模板: 问题答案: 这里有几个问题: 您正在调用System.out.println,它只是将输出发送到标准输出-而不是发送到浏览器

  • 伙计们!我对servlet是新手。我尝试按照book的步骤创建servlet。它只是一个登录表单,用户输入用户ID和密码,点击登录,然后在网页中显示输入值。但是,当我输入用户ID和密码时,我得到Http404错误。 我想知道context.xml可能有什么问题,但我不确定。我还尝试用xml映射servlet,但仍然得到错误。 消息/userlogin/userservlet 来源服务器没有找到目标

  • 问题内容: 我需要使用foursquare API搜索场所。当然,它是跨域的。 它在Firefox中没有任何问题,但是在Internet Explorer中(我已经测试过7、8、9)。 我的JavaScript代码如下所示: 在Firefox中,它可以完美显示接收到的数据。在Internet Explorer中,它登录控制台: 我该怎么办? 问题答案: 我在Windows Mobile 7上对此进

  • 问题内容: 我一直在努力使AJAX与Jquery一起使用。到目前为止,我最大的问题是我真的不知道如何弄清楚我在哪里犯错。我真的没有调试AJAX调用的好方法。 我正在尝试建立一个管理页面,其中我要执行的功能之一就是更改SQL数据库中设置的权限。我知道.click函数正在被触发,因此我将其范围缩小了,但是我不确定从AJAX调用到SQL查询的链在哪里出了问题。 我的.js代码: 我的.php处理程序:

  • 我想在Java WebApp中使用Tomcat7从ajax调用Servlet。 只有当我使用整个url“http://localhost:8080/webappname/vservlet”时,它才起作用,但只在我的PC中起作用。然而,我必须将它部署在具有商业域名的服务器上,这显然不同于“localhost”。 拜托,谁能告诉我是否有一种方法可以用相对URL来寻址servlet?因为如果我使用像'h

  • 问题内容: 我试图在我自己的函数中使用jQuery ajax调用的返回值,但它始终返回未定义的值。 ajax调用绝对有效,因为当我取消注释警报时,我得到了正确的返回,并且可以在firebug中看到它。我在做蠢事吗? 问题答案: AJAX调用是异步的-这意味着AJAX请求是按常规程序执行顺序发出的,并且在您的程序中这意味着不会将数据返回警报。 您不能以这种方式使用调用的返回值,而是将利用AJAX返回