【问题标题】:Ajax post request call doesn't workAjax 发布请求调用不起作用
【发布时间】:2013-12-08 17:26:45
【问题描述】:

我的 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 警报,但没有发送页面发布请求,也没有任何反应。有谁知道出了什么问题?

非常感谢..

【问题讨论】:

  • 控制台有错误吗?
  • 您的表单元素是否具有“名称”属性? jQuery 的表单序列化方法在我身上发生了几次。
  • 控制台没有错误..
  • 没有 name 属性,只有 path 属性来绑定它们,当我没有脚本时它可以完美运行
  • 请不要使用警报。您可以使用 console.log()。

标签: java jquery spring-mvc


【解决方案1】:

试试这个检查你发送和接收的内容:

<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 url 进行子索引:$('#postForm')[0].action 或获取属性 url:$('#postForm').attr('action');显然第二个只是路径,第一个会给你整个 URL。如果这样做,可以跳过 for 循环:

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

forEach 的问题在于并非所有浏览器都支持**

【讨论】:

  • 好的,这就是我得到的 event.returnValue 已被弃用。请改用标准 event.preventDefault()。 jquery-1.9.1.js:3345 Ajax Call login:30 Object {url: undefined, type: "POST", data: "sender=1&receivers=2&body=aageg"} 但它仍然没有发布页面..参数是有效
  • 这只是一个语法问题.. 这是输出 Ajax Call login:30 Object {url: "localhost:8443/MsgManagement/receive", type: "POST", data: "sender=1&receivers=2&body= ageg"},这很好
  • 我的意思是我第一次没有添加索引,但它仍然不起作用
  • 嘿@user3080263,试试新编辑的代码。根据您之前发布的内容,数据被序列化为 GET。我错过了整个事情。希望这次对你有用:)
猜你喜欢
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多