我试图使用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运行并显示警报:
error
未成功:未找到
这是怎么引起的,我该如何解决?
当您指定相对URL(不是以scheme或开头的URL /)时,它将相对于当前请求URL(在浏览器地址栏中看到的URL)。
/
您告诉您的servlet在以下位置可用:
http:// localhost:8080 / FullcalendarProject / CheckingAjax
想象一下,运行ajax脚本的网页是通过以下方式打开的:
http:// localhost:8080 / FullcalendarProject / pages / some.jsp
然后指定相对URL url: "CheckingAjax",它将被解释为:
url: "CheckingAjax"
http:// localhost:8080 / FullcalendarProject / pages / CheckingAjax
但这不存在。因此,它将返回HTTP 404“找不到页面”错误。
为了使其正常工作,您基本上需要使用以下方式之一指定URL:
url: "http://localhost:8080/FullcalendarProject/CheckingAjax"
这不是便携式的。每次将Web应用程序移至另一个域时,都需要对其进行编辑。您无法从webapp内部进行控制。
url: "/FullcalendarProject/CheckingAjax"
这也不是真正可移植的。每次更改上下文路径时,都需要对其进行编辑。您无法从webapp内部进行控制。
url: "../CheckingAjax"
尽管您可以从Webapp内部完全控制它,但它实际上也不是可移植的。每次在JSP中移动到另一个文件夹时,都需要对其进行编辑,但是,如果在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"