Javascript 使用自动完成jquery和odoorpc调用don';不要提出建议

Javascript 使用自动完成jquery和odoorpc调用don';不要提出建议,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我想在用户仍然按键时使用jquery自动完成从后端加载数据。 我看到了通过ajax调用进行自动完成 这里是我正在使用的代码,但是我被结果绊住了。 我不明白自动完成如何取回ODOORPC结果并在输入表单中显示它 <label class="control-label" for="timesheet_user_id">Employee: </label> <input id="employee_name"/> 通过控制台,我看到我收到了对象数组,但在html上什

我想在用户仍然按键时使用jquery自动完成从后端加载数据。 我看到了通过ajax调用进行自动完成

这里是我正在使用的代码,但是我被结果绊住了。 我不明白自动完成如何取回ODOORPC结果并在输入表单中显示它

<label class="control-label" for="timesheet_user_id">Employee:
</label>
<input id="employee_name"/>
通过控制台,我看到我收到了对象数组,但在html上什么也没有发生

可能是数据类型或rpc调用方式错误?

后端功能:

@http.route("/employee_search", type="json",
            auth="public", website=True)
def employee_search(self, name):

    employee_objs = request.env["hr.employee"] \
        .sudo().search([("name", "ilike", name)])

    if not employee_objs:
        return {"fail": True}

    suggestions = []
    for employee in employee_objs:
        employee_vals = {}
        employee_vals['value'] = employee.id
        employee_vals['data'] = employee.name
        suggestions.append(employee_vals)

    # make a dict of dicts with employees values
    return suggestions
编辑

修改为jquery自动完成
响应=数据带有

.then(function (data) {
       response(data);
       console.debug(response);
});
现在输入显示两个小框,里面没有文本。 从rpc调用接收到的数据在输入框后仍不显示

EDIT2

问题是
源代码:
,因为如果我传递一个静态对象数组,我可以看到它们,但是通过这个调用什么都没有发生……我错在哪里

employee_name.autocomplete({
            source: function (request, response) {
               ajax.jsonRpc("/employee_search", "call", {"name": employee_name.val()})
                    .then(function (data) {
                       response(data);
                       console.debug(response);
                    });
            }
        });

数据包含值数组,但源代码无法捕获它们。

好的,我终于编写了一段代码,用于实时搜索并提供建议:

以下是JS:

/*Autocomplete that suggest input*/
    var serial_number = $('#searchSerial');
    serial_number.autocomplete({
        minLength: 3,
        source: function (request, response) {
            ajax.jsonRpc("/serial_search", "call", {"serial": serial_number.val()})
                .then(function (data) {
                    console.debug(data);
                    if (data.fail) {
                        // if SN was not found in the db alert the user
                        // This is non blocking, the user can still compile the form
                        //alert(_t("Serial Number not found in the system, please fill the form manually"));
                        serial_number.addClass('error_input');
                    } else {
                        serial_number.removeClass('error_input');
                        response(data);
                    }
                });
        },
        //If the record return is only one auto select it
        response: function (event, ui) {
            if (ui.content.length === 1) {
                ui.item = ui.content[0];
                serial_number.val(ui.item.value);
                serial_number.data('ui-autocomplete')._trigger('select', 'autocompleteselect', ui);
                serial_number.autocomplete('close');
            }
        },
        select: function (event, ui) {
            let brand_id = $("input[name='brand_id']");
            let brand_name = $("input[name='brand_name']");
            let product_id = $("input[name='product_id']");
            let product_name = $("input[name='product_name']");
            let serial_number = $("input[name='serial_number']");

            brand_id.val(ui.item.brand_id);
            brand_name.val(ui.item.brand_name);
            product_id.val(ui.item.product_id);
            product_name.val(ui.item.product_name);
            serial_number.val(ui.item.serial_number);
        }
    });
当用户输入至少3个字母时,Javascript代码进行搜索,如果只有一条记录与大小写匹配,则由响应:自动选择。 当用户在建议列表中选择某个语音时,
所选:
案例填充其他输入字段

此处显示返回建议数据的控制器:

  @http.route("/serial_search", type="json",
                auth="public", website=True)
    def serial_search(self, serial):
        """
        Starting from a serial number (portal user input),
        serach for the corresponding lot and then search
        for product id/name and brand id/name.
        Return them to the website form.
        """
        serial_domain = [("name", "ilike", serial)]

        serial_objs = request.env["stock.production.lot"] \
            .sudo().search(serial_domain, limit=10)

        if not serial_objs:
            return {"fail": True}

        suggestions = []
        for serial_obj in serial_objs:
            serial_vals = {}
            serial_vals['data'] = serial_obj.product_id.id
            serial_vals['value'] = serial_obj.name

            serial_vals['product_id'] = serial_obj.product_id.id
            serial_vals['product_name'] = '%s - %s' % (
                serial_obj.product_id.default_code, serial_obj.product_id.name)
            serial_vals['brand_id'] = serial_obj.product_id.product_brand_id.id
            serial_vals['brand_name'] = serial_obj.product_id.product_brand_id.name
            serial_vals['serial_number'] = serial_obj.name

            suggestions.append(serial_vals)

        # make a list of dicts with serial number values
        return suggestions
  @http.route("/serial_search", type="json",
                auth="public", website=True)
    def serial_search(self, serial):
        """
        Starting from a serial number (portal user input),
        serach for the corresponding lot and then search
        for product id/name and brand id/name.
        Return them to the website form.
        """
        serial_domain = [("name", "ilike", serial)]

        serial_objs = request.env["stock.production.lot"] \
            .sudo().search(serial_domain, limit=10)

        if not serial_objs:
            return {"fail": True}

        suggestions = []
        for serial_obj in serial_objs:
            serial_vals = {}
            serial_vals['data'] = serial_obj.product_id.id
            serial_vals['value'] = serial_obj.name

            serial_vals['product_id'] = serial_obj.product_id.id
            serial_vals['product_name'] = '%s - %s' % (
                serial_obj.product_id.default_code, serial_obj.product_id.name)
            serial_vals['brand_id'] = serial_obj.product_id.product_brand_id.id
            serial_vals['brand_name'] = serial_obj.product_id.product_brand_id.name
            serial_vals['serial_number'] = serial_obj.name

            suggestions.append(serial_vals)

        # make a list of dicts with serial number values
        return suggestions