我正在使用来自themeforst的管理员模板,现在我需要通过ajax将数据发送到页面。当我收到它时,我发送的所有页面都是“wysiwyg”编辑器 - 它对我来说不起作用。那么如何正确解析呢?
JS:
function editThis(id) {
$("#failed_msg").fadeOut(100);
$("#success_msg").fadeOut(100);
$.ajax({
url: "admin/news_validation/editNew",
type: 'POST',
dataType: 'JSON',
data: {
new_id: id
},
success: function (data) {
if (data.failed) {
$("#failed_msg").fadeIn(600).find('i').html(data.failed);
} else if (data.success) {
$("#main_block_parsing").fadeOut(600, function () {
$("#main_block_parsing").remove();
$("#edit_new_parsing").fadeIn(800, function () {
$("#edit_new_parsing").html(data.page);
});
});
}
},
error: function (e) {
console.log(e.message);
}
});
PHP:
public function editNew(){
$data = array('id' => $this->input->post('new_id'));
$report = array();
if(!$data['id'] || !is_numeric($data['id']) || $this->news_model->checkNewExsists($data['id']) == FALSE){
$report['errors'] = array('failed' => 'Such new does not exsists');
} else {
ob_start();
$this->load->view('admin/pages/news/edit_new');
$result = ob_get_clean();
$report['errors'] = array('success' => 'The new was parsed successfully!', 'page' => $result);
}
echo json_encode($report['errors']);
我应该得到什么: 我实际得到的是:
在第二张照片中,您可以看到“wysiwyg”无效
答案 0 :(得分:1)
问题来自codeigniters CSRF保护。它希望每个帖子请求都有一个令牌。
您可以通过进入配置并暂时关闭CSRF保护来验证这是问题所在。该表格现在应该有效。现在你应该重新打开它并使用你的ajax请求发送令牌:
您可以在此处阅读更多内容:Codeigniter ajax CSRF problem
解决方案的要点是您需要使用codeigniters安全类为您发布的数据添加令牌和哈希
我真的很喜欢这里的georjars解决方案:https://stackoverflow.com/a/16140018/2062925
如果有效,请务必给予他信任:
<script>
var csfrData = {};
csfrData['<?php echo $this->security->get_csrf_token_name(); ?>']
= '<?php echo $this->security->get_csrf_hash(); ?>';
</script>
<!-- ... include other javascript files -->
</body>
</html>
$(function() {
// Attach csfr data token
$.ajaxSetup({
data: csfrData
});
});