如何使用ckeditor使用ajax发送数据?

时间:2012-11-11 09:37:53

标签: javascript jquery ajax django

我在django有一个表格。这是'撰写邮件'表格。我将此表单从视图发送到我的模板,然后我应用ckeditor来改变体型。我希望这个表格由ajax发布。当使用ckeditor时,body字段的值不会随request.POST一起发送。我使用这行代码来使用ckeditor:

CKEDITOR.replace('id_body'); 

(不使用ckeditor,一切正常。)

<form id="compose_form" action="compose/" method="post">
        {% csrf_token %}
        {{ form.non_field_errors }}
        <div>
            <div class="form-field">
                <label for="id_recipient">{% trans 'recipient' %}:</label>
                {{ form.recipient }}               
                {{ form.recipient.errors }}
            </div>
            <div class="form-field">
                <label for="id_subject">{% trans 'subject' %}:</label>
                {{ form.subject }}
                {{ form.subject.errors }}
            </div>
        </div>
        <div class="form-field">
            {{ form.body }}
            {{ form.body.errors }}
        </div>        
            <input id="messages-submit" type="submit" value=""Send"/>
        </div>
    </form>

我使用这个脚本通过ajax发送表单数据:

<script type="text/javascript">
        $(function() {
            $('#compose_form').submit(function() {
                var temp = $("#compose_form").serialize();                
                $.ajax({
                    type: "POST",
                    data: temp,
                    url: 'compose/',
                    success: function(data) {
                      // do s.th
                    }
                });
                return false;
            });
        });
    </script>

使用此脚本,body值不会发送到request.POST(我的意思是它在body字段中发送空字符串),当我将下面的行添加到我的脚本时,它会发送body字段的值,但它不是' t ajax了。你能帮我做点什么吗?

3 个答案:

答案 0 :(得分:4)

编辑器中的数据未包含在表单中的原因是编辑器不是表单的一部分。它需要更新与之关联的表单元素。为此,您需要告诉编辑器更新表单元素。

因此,在表单的提交功能中,您需要从编辑器中获取数据。

这应该可以解决问题:

$(function() {
        $('#compose_form').submit(function() {
            for (var instance in CKEDITOR.instances)
                CKEDITOR.instances[instance].updateElement();
            var temp = $("#compose_form").serialize();
            etc etc...

答案 1 :(得分:0)

我与django-ckeditor也有相同的问题,我尝试过的是

<script type="text/javascript">
     for (var instance in CKEDITOR.instances)
            CKEDITOR.instances[instance].updateElement();

然后通过以下方式检查实例名称:

console.log(instance)

它给出了“ id_Your_Message”,所以我做到了:

var temp = $("#id_Your_Message").val() 

工作正常

答案 2 :(得分:-1)

<script type="text/javascript">
    $(function () {
        $('#submit_button_id').click(function () {
            $.post("action post file url", $("#form_id").serialize(), function (data) {});
        });
    });
</script>

我希望上面的脚本可以帮到你