在PHP验证Codeigniter中无法识别CKedit数据

时间:2017-12-13 00:43:17

标签: php codeigniter ckeditor

首先,我不会t really now how to explain this but its sounds complicated to me. It makes my brain broken and I really don知道是否有人可以帮助我解决CKeditor的问题。

我的控制器代码:

      public function reply_topic()
    {
        $this->load->helper('form');
        $this->load->library('form_validation');

        $this->form_validation->set_rules('comment', 'Comment Field Required', 'required');
        //$this->form_validation->set_rules('g-recaptcha-response', 'recaptcha validation', 'required|callback_validate_captcha');
        //$this->form_validation->set_message('validate_captcha', 'Please check the the captcha form');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load_reply_to_topic_view($this->input->post('topic_id'));
        }
        else
        {
            $topic_id = $this->input->post('topic_id');
            $this->topic_model->postReplyTopic();
            echo '<div class="alert alert-success">'.lang_key('reply_submited').'</div>';
            $this->load_reply_to_topic_view($topic_id='');
        }
    }

这个代码开始工作正常没有问题。但是当我尝试提交数据时,总会出现错误。 就像评论字段为空一样,即使我已经将数据估算到评论部分 - 如果我使用CKeditor,也会出现此错误。但如果我只使用普通的textarea它真的很好。

<!-- Javascript -->
<script type="text/javascript">
CKEDITOR.replace( 'comment' );
</script>

以下是评论部分出现的代码

<script type="text/javascript">
var loadUrl = '<?php echo base_url("threads/load_reply_to_topic_view/".$item['id']);?>';
    jQuery.post(
        loadUrl,
        {},
        function(responseText){
            jQuery('.reply-topic-form-holder').html(responseText);
            init_reply_topic_js();
        }
    );



function init_reply_topic_js()
{
    jQuery('#replytopic-form').submit(function(e){
            var data = jQuery(this).serializeArray();
            jQuery('.topic-loading').show();
            e.preventDefault();
            var loadUrl = jQuery(this).attr('action');
            jQuery.post(
                loadUrl,
                data,
                function(responseText){
                    jQuery('.reply-topic-form-holder').html(responseText);
                    jQuery('.alert-success').each(function(){
                        jQuery('#replytopic-form textarea').each(function(){
                            jQuery(this).val('');
                        });
                    });

                    jQuery('.topic-loading').hide();
                    init_reply_topic_js();
                }
            );
        });
}
</script>

1 个答案:

答案 0 :(得分:1)

CK实际上并没有使用textarea字段,它只是一个占位符&#39;可以这么说。因此,您必须确保将CK中的数据添加到textarea中,否则当您通过AJAX发布时,您将不会获得该字段的数据。正常发布时,由于autoUpdateElement,这不是问题。

var data = jQuery(this).serializeArray();添加CKEDITOR.instances.comment.updateElement();之前。这将确保将CK编辑器的内部标记添加到textarea中,以便在序列化数组之前填充该字段。

方法here的文档。

jQuery('#replytopic-form').submit(function (e) {
    CKEDITOR.instances.comment.updateElement();
    var data = jQuery(this).serializeArray();
    jQuery('.topic-loading').show();
    e.preventDefault();
    var loadUrl = jQuery(this).attr('action');
    jQuery.post(
            loadUrl,
            data,
            function (responseText) {
                jQuery('.reply-topic-form-holder').html(responseText);
                jQuery('.alert-success').each(function () {
                    jQuery('#replytopic-form textarea').each(function () {
                        jQuery(this).val('');
                    });
                });
                jQuery('.topic-loading').hide();
                init_reply_topic_js();
            }
    );
});