Javascript 将Odoo AJAX附件或图像创建到客户端(前端)

Javascript 将Odoo AJAX附件或图像创建到客户端(前端),javascript,jquery,controller,odoo-11,Javascript,Jquery,Controller,Odoo 11,我所知道的 在模式创建对象中,我知道如何添加附件或图像,因为所有都在表单中,当用户单击提交按钮时,表单操作触发管理输入数据的控制器 例如: <form id="formId" t-attf-action="/my/object/#{slug(object)}/create" method="post" enctype="multipart/form-data"> <input type="hidden" name="csrf_token" t-att-value="re

我所知道的

在模式创建对象中,我知道如何添加附件或图像,因为所有
都在表单中,当用户单击提交按钮时,表单操作触发管理输入数据的控制器

例如:

<form id="formId" t-attf-action="/my/object/#{slug(object)}/create" method="post" enctype="multipart/form-data">
    <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
    <input type="hidden" name="object" t-att-value="object"/>
    <input type="text" name="text" class="o_website_form_input form-control"/>
    <input type="file" name="image" class="o_website_form_input form-control" accept="image/*"/>
    <input type="submit" class="btn btn-success" value="Create/"/>
</form>
class.compliance行值设置为所有输入、文本区域、选择、复选框,如果用户更改它们,我需要监视这些复选框

下面是调用保存数据的控制器的JS函数:

   function save_changed_values() {
        if (!isEmpty(dataToSaveConformities)) {
            ajax.jsonRpc("/my/sale_worksheet_line/non_conformity/update/value", "call", dataToSaveConformities)
                .then(function (data) {
                    //Clear data to send
                    for (var member in dataToSaveConformities) delete dataToSaveConformities[member];
                    if (data.error) {
                        //FIXME: check that case or manage it
                        $('.non-conformities-div').load(window.location + " .non-conformities-div>*", function () {
                            $('select.js-conformities-read-multiple').select2();
                        });
                    } else {
                        $('.non-conformities-div').load(window.location + " .non-conformities-div>*", function () {
                            $('select.js-conformities-read-multiple').select2();
                        });
                    }
                });
        }
    }
我尝试从
中获取图像的base64,并将其放入sended对象中(解析为JSON) 但在控制器中,我在**post中收到一个空值

   // onChange bind that manage confirmity line values save
    $(document).on("change", ".conformity-line-value", function () {
        let value = $(this).val();
        let name = $(this).attr('name');
        let type = $(this).attr('type');
        let non_conformity_line_id = Number($(this)
            .closest('div.non-conformities-line')
            .find("input[name='non_conformity_line_id']").val());

        //If the dict for this line does not exist create it
        if (!dataToSaveConformities[non_conformity_line_id]) {
            dataToSaveConformities[non_conformity_line_id] = {}
        }
        //Add changed elements into dic to corresponding line
        switch (name) {
            case 'name':
                dataToSaveConformities[non_conformity_line_id]['name'] = value;
                if (value === '') {
                    $(this).addClass('error_input');
                } else {
                    $(this).removeClass('error_input');
                }
                break;
            case 'non_conformity_note':
                dataToSaveConformities[non_conformity_line_id]['non_conformity_note'] = value;
                break;
            default:
                break;
        }
    });
   function save_changed_values() {
        if (!isEmpty(dataToSaveConformities)) {
            ajax.jsonRpc("/my/sale_worksheet_line/non_conformity/update/value", "call", dataToSaveConformities)
                .then(function (data) {
                    //Clear data to send
                    for (var member in dataToSaveConformities) delete dataToSaveConformities[member];
                    if (data.error) {
                        //FIXME: check that case or manage it
                        $('.non-conformities-div').load(window.location + " .non-conformities-div>*", function () {
                            $('select.js-conformities-read-multiple').select2();
                        });
                    } else {
                        $('.non-conformities-div').load(window.location + " .non-conformities-div>*", function () {
                            $('select.js-conformities-read-multiple').select2();
                        });
                    }
                });
        }
    }