提交ajax表单时如何提及URL?

时间:2013-07-17 14:13:28

标签: java javascript jquery html ajax

我正在使用HTML / JQuery / AJax来调用servlet。我正在向servlet提交一个表单。但它始终给404说没有找到资源。我有maven项目。

我在src/main/java包中的Servlet是:com.mycompany.sample

我在webapp/public文件夹中有jsp。

在web.xml中我使用url模式/myController

注册了servlet

在jsp中我对我的表单采取了以下行动:

<form action="myController" ...............

我有一个单独的.js文件,其中我提到了ajax调用,如下所示“

 $.ajax({
        type: "POST",
        url: "myController",
        data: dataString,
        success: function(msg) {
            alert('success');
        },
        error: function(ob,errStr) {
            alert('onfailure');
        }
    });

但我总是得到404错误,说找不到/myController资源,我得到onfailure警报。

我是否在myControllerform来电中正确引用了ajax

谢谢!

2 个答案:

答案 0 :(得分:2)

与其他人一样,请尝试完整路径,因为我认为404的原因是缺少应用程序上下文。

我不知道您是否使用了taglib,但是您可以使用url标记生成正确的URL:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url var="myControllerVar" value="/myController" />

然后,把它放在你的AJAX代码中:

$.ajax({
    type: "POST",
    url: "${myControllerVar}",
    data: dataString,
    success: function(msg) {
        alert('success');
    },
    error: function(ob,errStr) {
        alert('onfailure');
    }
});

否则,您可以尝试使用完整路径,因为我认为缺少应用程序上下文。您可以使用以下JSP var检索它:

${pageContext.request.contextPath}

那将是这样的:

${pageContext.request.contextPath}/myController

你是ajax代码:

$.ajax({
    type: "POST",
    url: "${pageContext.request.contextPath}/myController",
    data: dataString,
    success: function(msg) {
        alert('success');
    },
    error: function(ob,errStr) {
        alert('onfailure');
    }
});

答案 1 :(得分:1)

另一种方法是在ajax调用中使用以下网址:

$.ajax({
    type: "POST",
    url : "<%=request.getContextPath()%>/myController",
    data: dataString,
    success: function(msg) {
        alert('success');
    },
    error: function(ob,errStr) {
        alert('onfailure');
    }
});

我目前能够使用该URL来调用spring mvc控制器。我也在使用提交按钮上的事件监听器进行ajax调用。然后,“提交”按钮将调用包含ajax调用的函数。我正在使用基于注释的spring,而我的控制器也是如此:

    @Controller
    public class myController{

        @ResponseBody
        @RequestMapping(value = "/myController", method = RequestMethod.POST)
        public ModelAndView myControllerHandler(HttpServletRequest request)  {
              ModelAndView mv = new ModelAndView("/success");
        return mv;
        }
    }

我正在传递HttpServletRequest,但未使用该请求。我将返回直接指向success.jsp页面的模型和视图。我可以在事件监听器中添加代码,并在需要时提交按钮。