以下是详细信息:我最初使用的是远程表单进行呈现。
= form_for @myobj, :url => {:action=>"remoteAction", :controller=>"myobjects"}, :remote => true do |f|
... (f.fields....)
这将生成以下HTML:
<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" data-remote="true" action="/remoteAction">
当我点击提交按钮时,正如预期的那样,表单会以JS方式提交。 在控制器动作中,我对提交表单中的字段进行一些验证。 如果所有验证都通过,我将执行以下.js.haml模板:
$('form#new_myobj').removeAttr("data-remote");
$('form#new_myobj').attr('enctype', 'multipart/form-data');
$('form#new_myobj').attr('action', '/myobjects/regularAction');
成功地更改了页面上的 HTML(通过 Firebug 观察到)为:
<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" enctype="multipart/form-data" action="/myobjects/regularAction">
由于表单包含一个f.file_field,所以必须以multipart方式提交,以便可以上传图像,并且我不能使用“AS JS”进行提交。 现在,当我点击提交时,控制器操作“regularAction”确实被调用,但它仍然是“AS JS”。
问题是,我还需要更改HTML中的什么以便可以非XHR提交表单?这是否与头信息有关?