我希望在提交表单时触发此函数,该函数使用jquery的post方法:
function update_point_session(){
$.post('/update_point_session/',
{session: true},
function(data){}
);
return true;
}
我使用onsubmit
来触发它。
问题是在提交表单时它不会发送它。但如果我return false;
它会(虽然形式本身,当然不会)。看起来好像$.post
在页面通过表单定向到另一个页面之前没有发送..
所以我认为我return true;
之后必须$.post
。我试着把它放在function(data){}
里面,但它不起作用..
如何从jquery和表单中同时发送帖子?
答案 0 :(得分:3)
你可以做几件事。
由于$.post
是,according to the documentation,相当于
$.ajax({
type: 'POST',
url: url,
data: data,
success: success
dataType: dataType
});
您只需将$.post
替换为等效的$.ajax
来电,并将async: false
添加到选项中。这将使用AJAX提交表单,然后,由于函数中的return true;
,也会让浏览器正常发布表单。
这涉及一些事件处理程序杂耍:
// attach submit event handler to the form
$("#myform").submit(function() {
// Handler immediately detaches itself, so that
// we don't have an infinite loop when we call
// $(this).submit() ourselves below
$(this).unbind('submit');
// Do the AJAX
$.post(
'/update_point_session/',
{session: true},
function(data){
// When the AJAX completes, tell the browser
// to re-submit the form
$(this).submit();
}
);
// Prevent the browser from submitting it NOW,
// because the AJAX is still running
return false;
});
答案 1 :(得分:0)
在卸载页面之前,您必须等待异步帖子完成。您可以从服务器发送一个重定向URL,如json所示:
$('form').submit(function(e){
$.post(this.action || '/update_point_session/', $(this).serialize(), function(data){
// send back a redirect url from the server
if(data.url) location.href = data.url;
});
e.preventDefault()
});
答案 2 :(得分:0)
我会做这样的事情。
$('form#myFormId').submit(function(evt){
var form = $(this);
evt.preventDefault(); // Prevents default submission
$.post('/update_point_session/', {session: true}, function(data){
form.unbind('submit'); //Unbind js submit event
form.get(0).submit(); //submit the form
});
});