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

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

但是,它会转到errorfunction并显示警告:

没有成功:没找到

这是怎么造成的,如何解决?

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

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

HTTP://本地主机:8080 / FullcalendarProject / CheckingAjax

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

HTTP://本地主机:8080 / FullcalendarProject /页/ some.jsp

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

HTTP://本地主机:8080 / FullcalendarProject /页/ CheckingAjax

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

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

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

    这不便携。 每次将webapp移动到另一个域时,都需要对其进行编辑。 您无法从webapp内部控制此操作。

  2. url: "/FullcalendarProject/CheckingAjax"

    这也不是真正的便携式。 每次更改上下文路径时都需要编辑它。 您无法从webapp内部控制此操作。

  3. url: "../CheckingAjax"

    这实际上也是不可移植的,尽管您可以从webapp内部完全控制它。 每次将JSP移动到另一个文件夹时,都需要对其进行编辑,但如果你在JSP中移动,那么基本上你已经忙于编码了,所以这可以很容易地同时完成。

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

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

    或者当它包含在自己的JS文件中时(良好实践!),然后创建一个全局JS变量:

       

    url: contextPath + "/CheckingAjax"

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

        

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