【问题标题】:jquery for ruby on railsjquery for ruby​​ on rails
【发布时间】:2011-02-10 14:09:28
【问题描述】:

我打算使用此代码 http://gist.github.com/110410 转储 Prototype 以支持 jQuery,但我确实遇到了问题。

这是我的 HTML(链接到生成的链接):

<a onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'Mi6RcR6YDyvg2uNwGrpbeIJutSHa2fYboU37wSDE7AU='); f.appendChild(s);f.submit();return false;" class="post add_to_cart " href="/line_items?product_id=547">Add to cart</a>

问题:

除了页面重新加载外,一切正常。我怀疑提交通过导致页面重新加载。

有没有一种优雅的方法来防止这种情况?返回假;在这种情况下似乎没有削减它。

【问题讨论】:

    标签: javascript jquery unobtrusive-javascript


    【解决方案1】:

    嗯。使用这个(jQuery):

    <a class="post add_to_cart" rel="Mi6RcR6YDyvg2uNwGrpbeIJutSHa2fYboU37wSDE7AU=" href="/line_items?product_id=547">Add to cart</a>
    <script>
        $("a.add_to_cart").click(function(){
            $.post(this.href,{'authenticity_token':$(this).attr("rel")});
            return false;
        });
    </script>
    

    我将真实性令牌放在锚点的 rel attr 中,假设该令牌对产品是唯一的。


    更新

    因为显然 Rails 根本无法控制任何事情:

    <a class="post add_to_cart" href="/line_items?product_id=547" onclick='            $.post(this.href,{"authenticity_token":"Mi6RcR6YDyvg2uNwGrpbeIJutSHa2fYboU37wSDE7AU="});return false;'>Add to cart</a>
    

    【讨论】:

    • 整个 onclick 部分是由 rails 助手生成的,所以我也不需要太多控制,我想为非 javascript 浏览器保留它。有没有办法在不更改我的 html 代码的情况下拦截该提交?
    • 我不知道 Rails 吸得这么厉害。
    • 您想为非 JavaScript 浏览器保留什么?的JavaScript?这没有意义。
    • 你提供的方法还是很突兀,我不想手动构建我的链接,我只想覆盖rails helper构建的默认链接。此外,如果您在浏览器中禁用 javascript,该链接将不会传递令牌。
    • 您确实意识到您的要求是不可能的。锚元素不能执行表单 POST(没有 javascript)。只需将身份验证令牌放在 url 中即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多