我似乎无法找到有关如何在Rails 5中使用自定义标头提交webform的任何信息。我希望我发送PUT请求的URL也会收到一些自定义标头。我很惊讶form_for没有争论。
我可以通过将表单提交到我在其中修改标题的操作来完成此操作,例如request.headers['my-header'] = 'xyz'
。然后我必须在这个“中间”控制器动作中发出PUT
请求,我觉得这个额外的步骤是笨重和非传统的。
我还可以使用jQuery绑定到提交点击,并在通过JavaScript添加标题后提交表单数据。在这个过程中,我宁愿不涉及另一层(即JS)。
我不愿意这样做。有没有办法可以使用Rails表单帮助程序(或某些控制器帮助程序)为表单提交的请求添加一些自定义标题?
答案 0 :(得分:7)
Rails没有任何标签可以让我们这样做,因此无法为您的请求添加自定义标头。
实际上,如果没有xhr插件,你不能在html表单中设置自定义标题, 你必须使用它与ajax。这样的事情: -
<%= form_tag("/your_url", method: :post, :remote => true, :html => { id: "form-id" }) do |f| %>
...your form here...
<% end %>
然后你ajax代码: -
$('#form-id').submit(function() {
var valuesToSubmit = $(this).serialize();
$.ajax({
type: "POST",
url: $(this).attr('action'),
data: valuesToSubmit,
headers: { 'Xmlrpc-Token': 'value' , 'Token': 'another_value'}
}).success(function(response){
//success code
});
return false;
});
仅使用remote:在rails中为true将进行ajax调用,但您希望能够使用上面的代码对其进行自定义。
答案 1 :(得分:2)
浏览器只会发送标准标题,如Cookie,contenttype等。您无法使用HTML表单提交发送授权标题(或其他自定义标题)。您应该使用AJAX来做到这一点。
答案 2 :(得分:0)
$("#idForm").submit(function(e) {
var url = "path/to/your/script.php"; // the script where you handle the form input.
$.ajax({
type: "POST",
url: url,
data: $("#idForm").serialize(), // serializes the form's elements.
success: function(data)
{
alert(data); // show response from the php script.
}
});
e.preventDefault(); // avoid to execute the actual submit of the form.
});
<%= form_tag("/your_url", method: :post, :remote => true, :html => { id: "form-id" }) do |f| %>
...your form here...
<% end %>
$("#idForm").submit(function(e) {
var url = "path/to/your/script.php"; // the script where you handle the form input.
$.ajax({
type: "POST",
url: url,
data: $("#idForm").serialize(), // serializes the form's elements.
success: function(data)
{
alert(data); // show response from the php script.
}
});
e.preventDefault(); // avoid to execute the actual submit of the form.
});