如何从 jQuery $.ajax 调用 servlet 而不会出现 HTTP 404 错误
How to call servlet from jQuery $.ajax without getting HTTP 404 error
我正在尝试使用 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
函数并显示警报:
not success :Not Found
这是怎么造成的,我该如何解决?
当你指定一个相对URL(一个不以scheme或/
开头的URL)时,它会变成相对于当前请求URL( URL 你在浏览器的地址栏中看到。
您说过您的 servlet 可在以下位置获得:
假设您的 ajax 脚本运行的网页是通过以下方式打开的:
而你指定相对URLurl: "CheckingAjax"
,那么它会被解释为:
http://localhost:8080/FullcalendarProject/pages/CheckingAjax
但这并不存在。因此它将 return 一个 HTTP 404 "Page Not Found" 错误。
为了使其正常工作,您基本上需要使用以下方法之一指定 URL:
url: "http://localhost:8080/FullcalendarProject/CheckingAjax"
这不是便携式的。每次将 webapp 移动到另一个域时都需要对其进行编辑。您无法从网络应用程序内部控制它。
url: "/FullcalendarProject/CheckingAjax"
这也不是真正的便携。每次更改上下文路径时都需要对其进行编辑。您无法从网络应用程序内部控制它。
url: "../CheckingAjax"
这实际上也是不可移植的,尽管您可以从 webapp 内部完全控制它。每次在 JSP 移动到另一个文件夹时都需要编辑它,但是如果你在 JSPs 移动,你基本上已经在忙于编码,所以这可以很容易地同时完成时间.
最好的方法是让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"
我正在尝试使用 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
函数并显示警报:
not success :Not Found
这是怎么造成的,我该如何解决?
当你指定一个相对URL(一个不以scheme或/
开头的URL)时,它会变成相对于当前请求URL( URL 你在浏览器的地址栏中看到。
您说过您的 servlet 可在以下位置获得:
假设您的 ajax 脚本运行的网页是通过以下方式打开的:
而你指定相对URLurl: "CheckingAjax"
,那么它会被解释为:
http://localhost:8080/FullcalendarProject/pages/CheckingAjax
但这并不存在。因此它将 return 一个 HTTP 404 "Page Not Found" 错误。
为了使其正常工作,您基本上需要使用以下方法之一指定 URL:
url: "http://localhost:8080/FullcalendarProject/CheckingAjax"
这不是便携式的。每次将 webapp 移动到另一个域时都需要对其进行编辑。您无法从网络应用程序内部控制它。
url: "/FullcalendarProject/CheckingAjax"
这也不是真正的便携。每次更改上下文路径时都需要对其进行编辑。您无法从网络应用程序内部控制它。
url: "../CheckingAjax"
这实际上也是不可移植的,尽管您可以从 webapp 内部完全控制它。每次在 JSP 移动到另一个文件夹时都需要编辑它,但是如果你在 JSPs 移动,你基本上已经在忙于编码,所以这可以很容易地同时完成时间.
最好的方法是让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"