Ajax发布请求调用不起作用

时间:2013-12-08 17:26:45

标签: java jquery spring-mvc

我的Ajax调用有问题。 这是我的控制器:

@RequestMapping(value = { "/sendMsg" }, method = RequestMethod.POST)
public ModelAndView postSendMessage(@ModelAttribute("message") MsgParam param) {
ModelAndView result= new ModelAndView("sendMessage");
...Controller logic...
}

我的sendMessage.jsp中有一个应该返回json的表单。但是ajax调用不起作用所以现在我试图让它通过ajax调用返回html,这对用户没有任何影响。我现在要做的就是使用html返回进行简单的ajax调用。 这是我的jsp中的表单:

<form:form id="postForm" method="POST" commandName="message" action="${pageContext.request.contextPath}/sendMsg">
    ... input fields with path attributes...
</form:form>

这可以按预期工作,这就是省略逻辑的原因。 我尝试在表单后面添加以下脚本:

<script>
        $('#postForm').submit(function(evt) {
                evt.preventDefault();
                alert("ajax");
                msgData = $('#postForm').serialize();
                $.ajax({
                url: $('#postForm').action,
                type: 'POST',
                data: msgData
                });
        });
    </script>

所以现在当我尝试提交与之前相同的表单时,我会在ajax调用弹出之前收到ajax警报但是没有发送页面发布请求而且没有任何反应。有谁知道什么是错的?

非常感谢..

1 个答案:

答案 0 :(得分:0)

尝试此操作来检查您发送和接收的内容:

<script type="text/javascript">
//Wait for jQuery to be loaded
$(function(){

function _submitHandler(evt){
            evt.preventDefault();
            //form data placeholder
            var formData={};
            //Serialize the form as an array of objects{name and value}
            var msgData = $('#postForm').serializeArray();
            //fill the formData object with name:value pairs
            //from the serialized array
            for(var i=0, l=msgData.lenght; i<l; i++){
              formData[msgData[i].name]=msgData[i].value;
            }
            //Prepare ajax Object
            var ajaxObj = {
                url: $('#postForm')[0].action,
                type: 'POST',
                data: formData
            };
            //Inspect ajax object in console
            console.log("Ajax Call");
            console.log(ajaxObj);
            $.ajax(ajaxObj,function(response){
                console.log("Server Response");
                console.log(response);});
            }
$('#postForm').submit(_submitHandler);

});
</script>

对于URL,您需要对jQuery网址进行子索引:$(&#39;#postForm&#39;)[0] .action或获取属性url:$(&#39;#postForm&#39;)。 ATTR(&#39;动作&#39);显然第二个将只是路径,第一个将给你整个URL。如果你这样做,可以跳过for循环:

$("#postForm").serializeArray().forEach(function(el){formData[el.name]=el.value});

forEach的问题是所有浏览器都不支持**