元々、ajax beforeSendを設定して、すべてのAjax投稿リクエスト(セッションがリセットされている、大きな痛みなど)にcsrfメタタグを含める必要がありました。これはポストリクエストがうまく動作しています。しかし、これはjquery-railsの最新バージョンで扱われていたはずのもののようです。アップグレードしたときに何かが見逃されたような気がします...そして、はい、レイアウトにcsrfメタタグを含めています。レール3を3.1にアップグレードする - ajaxリクエストが機能しない
私の問題は、link_to:remoteです。私のリンクは正しいHTMLを生成している:
<%=link_to("important", "https://stackoverflow.com/questions/importance?qid=#{q.id}&imp=up",
:method=>"post",:remote=>true)%>
を生成します。
<a rel="nofollow" data-remote="true" data-method="post"
href="https://stackoverflow.com/questions/importance?qid=30&imp=up">important</a>
をただし、クリックした場合、要求がGET要求であるとXHRリクエストではありません/私のjsハンドラを使用していません。ここで
Started GET "https://stackoverflow.com/questions/importance?qid=30&imp=up" for 127.0.0.1 at 2012-01-30 11:41:36 -0500
Creating scope :page. Overwriting existing method Question.page.
Processing by QuestionsController#importance as HTML
Parameters: {"qid"=>"30", "imp"=>"up"}
私のレイアウトの一部のrelaventです::このに
<%= javascript_include_tag 'application' %>
<%= csrf_meta_tag %>
<%= yield :javascript %>
<script type="text/javascript">
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
</script>
任意の洞察力をこれが生成される3.0.7
リクエストから3.1.3にアップグレードする前に、正常に動作したのですか?アップグレードするときに何か迷っていましたか?
application.js:(ページのソースを経由して)が含まれている
//= require jquery
//= require jquery-ui
//= require jquery.purr
//= require best_in_place
//= require fancybox
//= require_tree .
JavaScriptファイル:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.purr.js?body=1" type="text/javascript"></script>
<script src="/assets/best_in_place.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.fancybox.js?body=1" type="text/javascript"></script>
<script src="/assets/fancybox.js?body=1" type="text/javascript"></script>
<script src="/assets/autocomplete-rails.js?body=1" type="text/javascript"></script>
<script src="/assets/bootstrap-alert.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.fancybox-1.3.4.pack.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.validate.min.js?body=1" type="text/javascript"></script>
<script src="/assets/validators.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<meta content="authenticity_token" name="csrf-param" />
<meta content="26P9UWaXFsZBE6jfjkQv00GgS+7+XmOOPxlh55liz4Q=" name="csrf-token" />
を修正する必要がありますか? jqueryとjquery_ujsをロードしていますか? –
application.jsで質問を更新してください – Danny