私のスクリプトには、次のような ajax によって送信されたフォームがありました。
jQuery.ajax({
url:jQuery('form',modal).attr('action'),
contentType: "application/json; charset=utf-8",
dataType: 'json',
type:'post',
data: {
email:jQuery('input[name="email"]',modal).val(),
something:jQuery('input[name="something"]',modal).val(),
level:jQuery('select[name="level"]',modal).val(),
YII_CSRF_TOKEN: jQuery('input[name="csrf"]').val()
},
success: function(data){
jQuery('.message',modal).html(data.message).slideDown();
if (!data.success){
jQuery('input[name="email"]',modal).addClass('error');
} else {
jQuery('input[name="email"]',modal).removeClass('error');
}
}
});
すべてがうまく機能していました。それから今日、データベースからアイテムを削除するための新しい関数を書いていました。だから私は自分のphp関数を書き(特別複雑なものは何もありません)、リンクをクリックしてトリガーされるjQuery ajax呼び出しを追加しました:
// ajax request
jQuery.ajax({
url:jQuery(this).attr('href'),
contentType: "application/json; charset=utf-8",
dataType: "json",
type:'post',
data: {
something:jQuery(this).attr('alt'),
YII_CSRF_TOKEN:jQuery('input[name="csrf"]').val()
},
success: function(data){
}
});
リンクとフォームの両方が同じビューにあります。しかし、削除するための新しい機能を追加した後、すべてが故障しました。「エラー: CSRF トークンを検証できませんでした」というメッセージが表示されるだけで、サーバーに POST 要求を行うことができません。CSRF を渡しているため、問題が見えません。firebug ログには次のように表示されます。
YII_CSRF_TOKEN bf6d9bf62ee96f32e34a74244baca7f2f1bdd569
something 4
なんらかの理由で新しい機能が機能しないことは理解できるかもしれませんが、なぜ他の機能も故障したのかはわかりません。