我的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警报但是没有发送页面发布请求而且没有任何反应。有谁知道什么是错的?
非常感谢..
答案 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的问题是所有浏览器都不支持**