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

Run action on load and stay on same page

本文关键字:一页 运行 操作 加载      更新时间:2023-09-26

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

您需要防止已生成事件的默认行为。

$form.submit(function(e){
    e.preventDefault();
    // your code
}

更新:

一旦整个脚本正常工作,您肯定需要添加以上内容。此外,请将您的标记添加到问题中。几个需要确定的基本问题:

#background_thread是您表单的id吗?

在Chrome Inspector(或类似工具)的网络选项卡中,请求是否被触发?

标记是异步传递的吗?如果是,您将需要使用.on来永久附加事件,而不仅仅是一个基本的选择器?

更新2:

您的表单本身是异步传递的,因此您的事件attaqchement必须更改为:

$(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()将该事件永久附加到该元素。

注意:我把它附在了body上,在那一点上开始听submit,在实践中,由于多种原因,你会这样做,你会把它附到表单的AJAX替换的最外面的点上,本质上,是离表单最近的父级,在初始页面加载时就会知道。

我希望这对你的申请有用,祝你好运。