質問編集履歴
3
コードに抜けがあることを補足
title
CHANGED
File without changes
|
body
CHANGED
@@ -124,4 +124,8 @@
|
|
124
124
|
ただ、createを実行すると、"The action you have requested is not allowed."のエラーページに飛ばされてしまいます(Todoの作成自体はできているようです)。
|
125
125
|
|
126
126
|
原因をお教えいただければ幸いです。
|
127
|
-
どうぞよろしくお願いいたします。
|
127
|
+
どうぞよろしくお願いいたします。
|
128
|
+
|
129
|
+
### 追記
|
130
|
+
上記のコードは、createのところでfalseを返し忘れています。
|
131
|
+
試してはいませんが、done()メソッドの後に`return false;`を挿入することで、すべてのajaxが正常に動作するかもしれません。
|
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -34,4 +34,94 @@
|
|
34
34
|
|
35
35
|
あくまで`$config['csrf_protectin] = TRUE`および`$config['csrf_regenerate'] = TRUE`としたうえで、ajaxを利用したいのですが、どなたか解決策をお教えいただけないでしょうか。
|
36
36
|
|
37
|
+
どうぞよろしくお願いいたします。
|
38
|
+
|
39
|
+
### 追記
|
40
|
+
[ここ](https://stackoverflow.com/questions/29903517/how-to-make-ajax-work-when-csrf-regeneration-is-true-in-codeigniter3)を参考に(というか丸写しして)、次のように書きました。
|
41
|
+
```lang-php
|
42
|
+
<script>
|
43
|
+
csrf_token_name = '<?php echo $this->security->get_csrf_token_name(); ?>'; // 追加
|
44
|
+
csrf_cookie_name = '<?php echo $this->config->item('csrf_cookie_name'); ?>'; // 追加
|
45
|
+
$(function() {
|
46
|
+
'use strict';
|
47
|
+
|
48
|
+
// 追加 --------------------------------------------------------
|
49
|
+
var object = {};
|
50
|
+
object[csrf_token_name] = $.cookie(csrf_cookie_name);
|
51
|
+
$.ajaxSetup({
|
52
|
+
data: object
|
53
|
+
});
|
54
|
+
$(document).ajaxComplete(function() {
|
55
|
+
object[csrf_token_name] = $.cookie(csrf_cookie_name);
|
56
|
+
$.ajaxSetup({
|
57
|
+
data: object
|
58
|
+
});
|
59
|
+
});
|
60
|
+
// -------------------------------------------------------------
|
61
|
+
|
62
|
+
// update
|
63
|
+
$('#todos').on('click', '.update_todo', function() {
|
64
|
+
var id = $(this).parents('li').data('id');
|
65
|
+
$.ajax({
|
66
|
+
type: 'POST',
|
67
|
+
url: '<?php echo site_url('todos/update'); ?>',
|
68
|
+
data: {
|
69
|
+
id: id
|
70
|
+
},
|
71
|
+
dataType: 'json'
|
72
|
+
})
|
73
|
+
.done(function(result) {
|
74
|
+
if (result === '1') {
|
75
|
+
$('#todo_' + id).find('.todo_title').addClass('done');
|
76
|
+
} else {
|
77
|
+
$('#todo_' + id).find('.todo_title').removeClass('done');
|
78
|
+
}
|
79
|
+
});
|
80
|
+
});
|
81
|
+
|
82
|
+
// create
|
83
|
+
$('#new_todo_form').on('submit', function() {
|
84
|
+
var title = $('#new_todo').val();
|
85
|
+
$.ajax({
|
86
|
+
type: 'POST',
|
87
|
+
url: '<?php echo site_url('todos/create'); ?>',
|
88
|
+
data: {
|
89
|
+
title: title
|
90
|
+
},
|
91
|
+
dataType: 'json'
|
92
|
+
})
|
93
|
+
.done(function(result) {
|
94
|
+
var $li = $('#todo_template').clone();
|
95
|
+
$li
|
96
|
+
.attr('id', 'todo_' + result.id)
|
97
|
+
.data('id', result.id)
|
98
|
+
.find('.todo_title').text(title);
|
99
|
+
$('#todos').prepend($li.fadeIn());
|
100
|
+
$('#new_todo').val('').focus();
|
101
|
+
});
|
102
|
+
})
|
103
|
+
|
104
|
+
// delete
|
105
|
+
$('#todos').on('click', '.delete_todo', function() {
|
106
|
+
var id = $(this).parents('li').data('id');
|
107
|
+
if (confirm('are you sure?')) {
|
108
|
+
$.ajax({
|
109
|
+
type: 'POST',
|
110
|
+
url: '<?php echo site_url('todos/delete'); ?>',
|
111
|
+
data: {
|
112
|
+
id: id
|
113
|
+
}
|
114
|
+
})
|
115
|
+
.done(function() {
|
116
|
+
$('#todo_' + id).fadeOut(400);
|
117
|
+
});
|
118
|
+
}
|
119
|
+
});
|
120
|
+
});
|
121
|
+
</script>
|
122
|
+
```
|
123
|
+
こうすると、`$config['csrf_regenerate'] = TRUE`の状態でもupdateとdeleteのajaxが正常に動きます。
|
124
|
+
ただ、createを実行すると、"The action you have requested is not allowed."のエラーページに飛ばされてしまいます(Todoの作成自体はできているようです)。
|
125
|
+
|
126
|
+
原因をお教えいただければ幸いです。
|
37
127
|
どうぞよろしくお願いいたします。
|
1
文の順序などを変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -24,9 +24,9 @@
|
|
24
24
|
});
|
25
25
|
});
|
26
26
|
```
|
27
|
+
上記に加えて、追加および削除の機能も実装済みです。
|
27
|
-
なお、
|
28
|
+
なお、Todoを追加するための入力フォームには`form_open()`を使用しています。
|
28
29
|
|
29
|
-
上記に加えて、追加および削除の機能も実装済みです。
|
30
30
|
CSRFプロテクションが無効であれば、すべての機能が正常に動作します。
|
31
31
|
**しかし、CSRFプロテクションを有効化すると、ページ読み込み後の最初の1回しかajaxが動いてくれません。**
|
32
32
|
|