小编典典

用AJAX将真实性令牌发送到Rails的正确方法

ajax

这有效,但是由于缺少真实性令牌而被停止:

$(".ajax-referral").click(function(){
  $.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script"});
  return false;
});

所以我尝试像这样添加它:

$(".ajax-referral").click(function(){
  $.ajax({type: "POST", url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN, dataType: "script"});
  return false;
});

并且它正确地将auth_token作为参数传递,但似乎丢失了其余的表单。

无论如何要完成发送有效的表单数据以及真实性令牌的工作?

这是一个Rails环境。我脑子里有这个。

= javascript_tag "var AUTH_TOKEN = '#{form_authenticity_token}';" if protect_against_forgery?

我尝试过的事情

1。

= hidden_field :authenticity_token, :value => form_authenticity_token

2。

$.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script", authenticity_token: AUTH_TOKEN});

3。

// Always send the authenticity_token with ajax
$(document).ajaxSend(function(event, request, settings) {
    if ( settings.type != 'GET' ) {
        settings.data = (settings.data ? settings.data + "&" : "")
            + "authenticity_token=" + encodeURIComponent( AUTH_TOKEN );
    }
});

阅读 265

收藏
2020-07-26

共1个答案

小编典典

实际上,您正在读取actionform
的属性并向其发送ajax请求。要发送表单数据,您必须提交表单,也可以序列化表单数据并以ajax请求的形式发送,例如

$(".ajax-referral").click(function(){
  $.ajax({
      type: "POST", 
      url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN, 
      data:$(this).parent("form").serialize(),
      dataType: "script"
      });
  return false;
});

这样做将序列化表单数据并将其与ajax请求一起发送,并且已经通过查询字符串发送了真实性令牌

2020-07-26