【问题标题】:Sending form contents as both html and ajax?将表单内容作为 html 和 ajax 发送?
【发布时间】:2013-02-17 05:11:38
【问题描述】:

我有一个通过 html 提交更新模型的管理表单。我希望能够通过管理表单中的链接或按钮将表单的内容发送到 Ajax 模式对话框以进行“预览”。

有没有办法通过 Ajax 将表单的内容发送到模态对话框而不破坏 html 提交?到目前为止,我所能做的就是将数据作为 html 放入模式中,这会破坏 js 渲染。我发现的所有 Ajax 提交示例都附在表单上,​​这将破坏 html 提交。

建议和/或指针表示赞赏。

我们正在使用 Rails 3.2.12 来实现它的价值。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    我想这取决于你如何渲染你的模态。如果您在服务器端进行操作,并且只需要将表单值获取到您的 ajax 控制器操作,您可以使用 jquery 执行类似的操作"

    $.post(ajaxUrl + "?" + $("#myform").serialize())
    

    生成表单值的查询字符串,您可以将其发送给 ajax 模型。

    或者,如果您正在构建模态客户端,请尝试

    $("#myform").serializeArray()
    

    获取name, value 对的数组

    【讨论】:

    • 为什么要在 post 请求中添加查询字符串?
    • 谢谢,这为我指明了我需要去的方向,请参阅下文,了解我最终完成的工作。
    【解决方案2】:

    这就是让它在 Rails 3.2.12 下工作所需要的

    查看:

    <%= link_to 'Preview Promotion UI', admin_preview_promotion_url, id: :promotion_preview %>
    

    上面的链接在do/end表单里面。

    application.js 中的 JavaScript

    $("#promotion_preview").live('click', (function (event) {
    event.preventDefault();
    $.post("/store/admin/promotions/preview",
        $(event.currentTarget.parentElement).serialize().replace('=put&', '=post&'),
        {},
        "script"
    );
    }));
    

    Rails.js 会在页面中注入一些隐藏代码,用于设置 PUT 的响应类型,然后阻碍路由。至少在这种情况下,只需将 PUT 替换为 POST 即可解决问题。

    通过这段代码,我可以像往常一样发布我的表单更新,并使用表单数据激活模式对话框“预览”。

    【讨论】:

    • 代码是正确的,我的推理是错误的......如果表单是#update,_method是PUT,如果是#create,它是POST。
    • 在 jquery 1.9 中 live 被删除用户 on 代替
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多