在加载时运行操作并保持在同一页面上

时间:2013-08-05 19:31:13

标签: javascript jquery grails

我正在尝试在我的应用程序中加载页面时在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){上失败,无法通过。

1 个答案:

答案 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替换表格的最外层,基本上,在初始页面加载时将知道的表格的最近父级。

我希望这对您的应用程序有一些用处和好运。