CodeIgniter - 如何通过ajax传递wysiwyg编辑器

时间:2013-12-09 14:34:09

标签: jquery ajax codeigniter wysiwyg

我正在使用来自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']);

我应该得到什么:wsiwyg editor 我实际得到的是:enter image description here

在第二张照片中,您可以看到“wysiwyg”无效

1 个答案:

答案 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
    });
});