bra*_*rad 6 browser forms parameters ruby-on-rails
编辑 - 显然没有人知道这里有什么令我烦恼的事.我认为这只是一个问题,我在页面的其他地方做了一些阻止状态属性发送的事情.问题是我什么也看不见.我希望有人见过类似的东西,可以建议我需要看的地方.
我的页面上有一个虚拟表单,用于将数据发布到我的网络应用程序.它是在Rails中创建的(使用HAML)就像这样;
=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do
=hidden_field_tag 'invoice[status]', 'Sent'
Run Code Online (Sandbox Code Playgroud)
这会生成以下html;
<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" />
<input name="_method" type="hidden" value="put" />
<input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=" />
</div>
<input id="invoice_status" name="invoice[status]" type="hidden" value="Sent" />
</form>
Run Code Online (Sandbox Code Playgroud)
在DOM中,这显示如下
<form accept-charset="UTF-8" action="/bulk_invoices/" class="mark-sent-form" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="?">
<input name="_method" type="hidden" value="put">
<input name="authenticity_token" type="hidden" value="OU8GtbHycR/EJ+H3GG9MN59xI59v47LSaFc2wYZloAs=">
</div>
<input id="invoice_status" name="invoice[status]" type="hidden" value="Sent">
</form>
Run Code Online (Sandbox Code Playgroud)
这个表单是用jquery(使用coffeescript)发布的,就像这样;
jQuery ->
$('a.mark-sent').click -> updateBulkInvoices('.mark-sent-form')
updateBulkInvoices = (form) ->
$(form).attr('action', "/bulk_invoices/#{checkedInvoices().get().join()}").submit()
Run Code Online (Sandbox Code Playgroud)
这种模式对其他行动很有帮助,但"发票[状态]"似乎引起了问题.使用jQuery提交表单时,不会传递隐藏字段.我在Rails控制台中看到以下内容;
Parameters: {"utf8"=>"?", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "id"=>"16"}
Run Code Online (Sandbox Code Playgroud)
即,发票[status]字段未与表单参数一起传递.如果我将此字段的名称更改为其他任何内容,则可以正常工作,例如
=form_tag bulk_invoice_path(''), method: 'put', class: 'mark-sent-form' do
=hidden_field_tag 'invoice[flatus]', 'sent'
Run Code Online (Sandbox Code Playgroud)
在我的控制台中给我以下参数;
Parameters: {"utf8"=>"?", "authenticity_token"=>"+qW9kIih5l2j69w1LK2YfQ9mYQ7nKPDm5XgLZuKB4ic=", "invoice"=>{"flatus"=>"sent"}, "id"=>"16"}
Run Code Online (Sandbox Code Playgroud)
如果我监控Chrome开发者工具上的"网络"标签,我发现同样的事情发生了,所以我认为这不是Rails的事情,它似乎是一个浏览器问题.不过我和Safari以及Firefox也是一样的.
在浏览器表单中,状态是某种神奇的保留字吗?这里发生了什么?
我无法重现该问题,但我怀疑这是由提交表单时的 Javascript 引起的。要对此进行调试,您可以执行以下操作:
这应该会让您进入在提交操作上暂停的 Javascript 调试器,然后您可以单步执行代码并准确查看它在做什么。
我希望这有帮助!