我正在尝试在我的应用程序中加载页面时在grails控制器中运行一个操作,该操作将启动一个线程继续执行任务。我仍然能够成功地实现它。这是我的代码:
$(document).ready(function(){
var $form = $("#background_thread");
$form.submit(function(e){
e.preventDefault();
$.post($(this).attr("background"), $(this).serialize(), function(data){
alert("should work" + data)
});
return false;
});
});
我不能为我的生活弄清楚为什么它不起作用。是否有一些我忽略的简单语法或不同的方式我应该这样做?
更新
我的表单ID是#background_thread
,我正在尝试异步执行,以便页面仍然保持不变,我的操作将会运行。
我的脚本已运行,但在$form.submit(function(e){
上失败,无法通过。
答案 0 :(得分:2)
您需要阻止已生成事件的默认行为。
$form.submit(function(e){
e.preventDefault();
// your code
}
更新
一旦你使整个脚本工作,你肯定需要添加上述内容。另外,请在问题中添加标记。一些基本问题需要确保:
#background_thread是您表单的ID吗?
在Chrome Inspector(或类似网站)的网络标签中,是否会触发请求?
标记是异步传递的,就像它一样,你需要使用.on来永久地附加事件,而不仅仅是一个基本的选择器吗?
更新2:
您的表单本身是异步传递的,因此您的事件获取必须更改为:
$(document).ready(function(){
$("body").on("submit", "#background_thread", function(e){
e.preventDefault();
$.post($(this).attr("background"), $(this).serialize(), function(data){
alert("should work" + data)
});
return false;
});
});
因此,要解释一下,您的事件附件是在文档准备期间发生的。记录准备好的火灾,但表单尚未传递给DOM,因此它没有附件。因此,在整个页面呈现给浏览器的整个生命周期中,使用on()将该事件永久附加到该元素。
N.B。我把它附在身上,在那时开始听取提交,实际上你会不这样做有很多原因,你会把它附加到AJAX替换表格的最外层,基本上,在初始页面加载时将知道的表格的最近父级。
我希望这对您的应用程序有一些用处和好运。