Ruby on rails Rails 5:表单如何使用自定义HTTP头提交?

Ruby on rails Rails 5:表单如何使用自定义HTTP头提交?,ruby-on-rails,webforms,http-headers,ruby-on-rails-5,Ruby On Rails,Webforms,Http Headers,Ruby On Rails 5,我似乎找不到任何关于如何在Rails 5中使用自定义标题提交Web表单的信息。我希望我向其发送PUT请求的URL也能接收一些自定义标题。我感到惊讶的是,没有理由这样做 我可以通过将表单提交到一个操作来完成这一点,在该操作中我修改了那里的标题,例如,request.headers['my-header']='xyz'。然后,我必须从这个“中间”控制器动作中发出PUT请求,我觉得这个额外的步骤很笨拙,很不传统 我还可以使用jQuery绑定到提交点击,并在通过JavaScript添加标题后提交表单数据

我似乎找不到任何关于如何在Rails 5中使用自定义标题提交Web表单的信息。我希望我向其发送PUT请求的URL也能接收一些自定义标题。我感到惊讶的是,没有理由这样做

我可以通过将表单提交到一个操作来完成这一点,在该操作中我修改了那里的标题,例如,
request.headers['my-header']='xyz'
。然后,我必须从这个“中间”控制器动作中发出
PUT
请求,我觉得这个额外的步骤很笨拙,很不传统

我还可以使用jQuery绑定到提交点击,并在通过JavaScript添加标题后提交表单数据。我不希望在这个过程中涉及到另一层(即JS)


我也不想这样做。是否有一种方法可以使用Rails表单帮助程序(或某个控制器帮助程序)向表单提交的请求添加一些自定义标题?

浏览器将只发送cookie、contenttype等标准标题。您不能使用HTML表单提交发送授权标题(或其他自定义标题)。您应该使用AJAX来实现这一点

Rails没有任何允许我们这样做的标记,因此无法向您的请求添加自定义头

事实上,如果没有xhr插件,您无法在html表单中设置自定义标题, 您必须将其与ajax一起使用。大概是这样的:-

<%= form_tag("/your_url", method: :post, :remote => true, :html => { id: "form-id" }) do |f| %>
    ...your form here...
<% end %>
在rails中仅使用remote:true将进行ajax调用,但您希望能够使用上面的代码对其进行自定义。

$(“#idForm”).submit(函数(e){
var url=“path/to/your/script.php”;//处理表单输入的脚本。
$.ajax({
类型:“POST”,
url:url,
数据:$(“#idForm”).serialize(),//序列化表单的元素。
成功:功能(数据)
{
警报(数据);//显示来自php脚本的响应。
}
});
e、 preventDefault();//避免执行表单的实际提交。
});
true,:html=>do | f |%>
…你的表格在这里。。。

为什么要随表单发送自定义http头?你想存档什么?@spickermann真的,答案是“我想要什么”-为什么我不需要发送自定义标题?我能想到很多原因。对于这个特殊的例子,我试图将承载令牌头发送到一个需要它们进行身份验证的API。我们如何从表单设置这些?它不适用于使用AJAX的
remote:true
。因此您可以使用:,$(“#您的表单”)。on('AJAX:beforeSend',function(event,data,status,xhr){//Add headers});嗯,使用
remote:false
Rails只构建一个表单标记,它不会设置标题。使用
remote:true
你是说Rails不会这么做,但没有什么好的理由。@MarlinPierce:显然,以前没有人需要它。这是很好的理由@AlexLyalka这个问题是问,是否可以通过Rails的
表单u来实现。感谢您提供了另一个选项。不,表单标记并不只是创建表单标记。当{remote:true}时,Rails创建HTML表单标记,并提供javascript从表单获取值,并进行AJAX调用。所以我在寻找表单标记方法的一些参数,告诉Rails在进行AJAX调用时包括设置自定义头。好的,这将纠正答案,这不仅仅是转换为html标记。但是要回答您的问题,没有办法使用rails标记添加标题。另一种选择是使用js。仅使用remote:true将不允许您自定义请求头。为此,您需要禁用该行为(在上面的代码中使用return false),并使用您自己的提交函数发送它。谢谢,但我想每个人都知道这可以通过javascript实现。问题是这是否可以通过Rails表单助手来完成。
$('#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;
});