当前位置: 首页 > 知识库问答 >
问题:

从JSON请求中自动选择Select2:使用数据编辑器

鞠乐
2023-03-14

我使用select2作为typefirst排序:当用户键入时,结果会根据变化的输入进行填充。我使用templateResult来自定义带有图像、按钮等的搜索结果。templateSelect将返回到select2输入,只是ajax JSON的某些部分。

它工作得很好。

我现在使用datatables编辑器来显示表单。作为编辑器的一部分,当表单以编辑模式打开时,基于下面代码的相同URL ajax请求将向URL添加initialValue=true和value=“something”参数

在AJAX php页面上,我捕获initialValue=true,然后使用与发送的值对应的JSON数据进行响应。

这是我的选择2:

{
   "label": "Attach to Contact:",
   "name": "assigned_to_contact_id",
   "type": "select2",
        "opts": {
             value: "",
             initialValue: true,
             ajax: {
                    url: "ajax_get_json.php?what=company_autocomplete_contacts",
                    dataType: 'json',
                    delay: 250,
                    data: function (params) {
                        return {
                            query: params.term, // search term
                            page: params.page
                        };
                    },
                    processResults: function (data, params) {
                        // parse the results into the format expected by Select2
                        // since we are using custom formatting functions we do not need to
                        // alter the remote JSON data, except to indicate that infinite
                        // scrolling can be used                            
                        params.page = params.page || 1;

                        return {
                            results: data,
                            pagination: {
                                more: (params.page * 30) < data.total_count
                            }
                        };
                    },
                    cache: true
                },
                escapeMarkup: function (markup) {
                    return markup;
                }, // let our custom formatter work
                minimumInputLength: 1,
                templateResult: formatResults_editor,
                templateSelection: formatResultsSelection_editor,
                allowClear: true,
                placeholder: {
                    "id": "",
                    "text": "(Searching all locations)"
                }
            }
 }

以下是我的格式函数:

function formatResults_editor(results) {

    if (results.loading) {
        return "Searching...";
    }

    //set image to contact pic
    var image = '';

    if (results.no_contact_pic_requested == 'Y') {
        image = 'company_specific_files/contacts_images/no_pic_requested.png';
    } else {
        image = 'company_specific_files/contacts_images/' + results.company_id + '/' + results.id + '/' + 'webcam.jpg';
        //check to see if the pic exists, else set default image
        $.ajax({
            type: "POST",
            async: false,
            url: 'company_specific_files/contacts_images/' + results.company_id + '/' + results.id + '/' + 'webcam.jpg',
            error: function (response, status, xhr) {
                //if no image present, use default image
                image = 'company_specific_files/contacts_images/blank_avatar.png';

            },
            success: function (response, status, xhr) {
                //this is how I see if there's an image:  check the content-type response from ajax call. Make sure ajax is not async to work
                var ct = xhr.getResponseHeader("content-type") || "";

                if (ct == "image/jpeg") {
                    image = 'company_specific_files/contacts_images/' + results.company_id + '/' + results.id + '/' + 'webcam.jpg';
                } else {
                    image = 'company_specific_files/contacts_images/blank_avatar.png';
                }

            }
        });
    }

    var markup = "<div class='clearfix'><img style='float:left; padding-right: 5px' class='img-responsive' height='50' width='50' src='" + image + "'>" + ' ' + results.label + "</div>";
    return markup;

}

function formatResultsSelection_editor(results) {


    if (results.id === '') {
        return '(Searching all locations)'; //placeholder added this way since using ajax per docs.
    }

    return results.contact_name + ' ' + results.birthdate;

}

当用户在select2中键入/搜索名称时,一切正常:填充值,结果在下拉框中格式化,结果在select2输入框中显示。

现在,如果编辑器打开并填充select2的值,AJAX请求如下所示:

ajax_get_json.php?what=company_autocomplete_contacts&initialValue=true&value=%224258%22  

... 该页面的响应如下所示:

{"id":"1","text":"sample text","location":"Bayview","contact_name":"Mark","birthdate":"2010-05-28","label":"Mark from Bayview","value":"22","location_id":"4322","company_id":"432342","no_contact_pic_requested":"N"}

那么,为什么select2不能像从templateSelection中选择一样自动填充JSON响应标签呢?

当有初始值时,占位符仍然表示“搜索...”当表单以编辑模式打开时,当它真的应该表示“标记(2010-05-28)”,就像用户搜索它并选择templateResult选项时一样。

这是我所能做的,似乎不能再取得任何进展了。

共有1个答案

郎德馨
2023-03-14

如果有人遇到这个问题:

我发现这与数据编辑器有关。

我不能使用template选择。我用id和文本格式化结果。从那里,它将相应地填充。

 类似资料:
  • 问题内容: 我有以下代码(javascript): 对于服务器端,我正在使用ASP MVC4。select使用ajax获取数据并呈现选项,但是该选项是不可选择的。在阅读其他文章时,他们使用id函数进行了描述,但是此函数似乎在我使用的2.4的select2版本上不见了 我在github 上显示的文档中遵循ajax的示例 “加载远程数据” 问题答案: 如果您的ajax响应没有 id 和 text 属性

  • 一个好用趁手的编辑器可以为我们带来极大的工作效率提升,lua 本身并不挑编辑器只是一个存文本,但是如果有代码提示,方便的 goto 跳转,在我们理解别人的代码效率上将会有极大的提升。 我从最初的记事本编辑、vi,到后来的UE自定义语法高亮和函数列表,以及 scite 等寻找和尝试过能找到的绝大部分的 lua 编辑器,我想在编辑器选择上面(linux 下的不熟)应该比较有发言权,这里我主要讲我的环境

  • 我在mysql数据库中有名为的表,其中存在类、学生姓名等。 我想在jsp中使用select选项,这样当且仅当首先选择class时,在选择class之后,该特定类的所有学生姓名都应该通过从数据库中检索记录自动(动态)显示在另一个select下拉列表中。 在这里我想使用servlet进行数据库连接,并通过通过jsp访问所有数据库记录

  • 问题内容: 这项工作(使用Pandas 12 dev) 然后我意识到我需要使用“开始于”来选择字段,因为我缺少一堆。因此,根据我所能追踪的熊猫文档,我尝试过 并得到了AttributeError:’float’对象没有属性’startswith’ 所以我尝试了具有相同结果的替代语法 参考http://pandas.pydata.org/pandas-docs/stable/indexing.htm

  • 我希望能够连续轮询数据库,使用Camel从我的表中选择数据。我已经在我的spring boot应用程序中配置了Camel。以下是我正在使用的配置 建筑格拉德尔: RouteBuilder类: 豆: application.properties 我面临的问题是,当我打印bean方法参数(generateSalesData(String payload))时,我得到的是查询字符串本身(“从投标书中选择

  • 问题内容: 我的Select2 3.4.5无法使用JSON数据。 这是我在HTML上的输入框: …还有我的JavaScript 我使用Laravel 4制作了一个API,每当在文本框中键入任何内容时,该API都会返回一个值。 如果在文本框中键入“ test”,则结果如下: 我无法将结果添加到我的Select2下拉列表中。我认为并且正在引起问题,因为我不知道应该在上面放置什么参数。我不知道从何处获取