【问题标题】:Select2 -> Dynamic input returns as a string (jQuerySelect2 -> 动态输入作为字符串返回(jQuery
【发布时间】:2013-11-16 18:51:13
【问题描述】:

我的选择 2 的格式是这样的:

$("#selectPretty").select2({
    tokenSeparators: [","], 
    tags:["1", "2", "3", "php", "tiger", "test", "big bang theory", "bikes", "gh", "sd", "cheese", "food", "name", "jack", "chickens", "yikes!", "testing", "this", "is", "a", "questionj", "new", "question", "s"]
});

显示如下:

但是,当我尝试使用此代码通过 AJAX 将数据动态分配到框中时:

$.ajax({
    type: "POST",
    url: "grabTags.php",
    data: "tags="+$("#selectPretty").val(),
    success: 
        function(msg2) {
            alert(msg2);
            $("#selectPretty").select2({
                tokenSeparators: [","],
                tags:[msg2]
            });
        }
});

结果会这样:

由于某种原因,整个字符串是一个选项,我无法将结果分解为不同的选项...

有人知道我可以在这里做什么吗?

请注意,'tags:[msg2]' 是从我的 grabTags.php 文件中返回的,并且 'msg2' = "1", "2", "3, etc...

最诚挚的问候

【问题讨论】:

    标签: javascript php jquery jquery-select2


    【解决方案1】:

    您是否尝试过拆分从 PHP 返回的字符串?

    您可以在字符串(例如从您的 PHP 返回的字符串)上调用 split 方法并将其传递给分隔符(在您的情况下为 ,)。

    这样的事情应该可以工作:

    $.ajax({
        type: "POST",
        url: "grabTags.php",
        data: "tags="+$("#selectPretty").val(),
        success: 
            function(msg2) {
                //at this point, msg2 is the string: '"1","2","3"'
    
                var myTags = msg2.split(',');
                //myTags is now the array: ["1","2","3"]
    
                $("#selectPretty").select2({
    
                    //tags needs to be an array, so pass in myTags
                    tags: myTags 
                });
            }
    });
    

    【讨论】:

    • 非常感谢!这似乎奏效了。这到底是做什么来使它工作的呢?我不明白!非常感谢:)
    • 没问题。我已经更新了我的答案以提供更多解释。如果仍然没有意义,请告诉我:)
    • 这真的很有帮助!再次感谢,西蒙! :)
    【解决方案2】:

    Select2 tags 需要一个javascript 数组,而不仅仅是一个用括号括起来的字符串。

    所以服务器端,让 PHP 吐出一个 json 编码的数组:

    $tags = array("1", "2", "3", "php", "tiger", "test", "big bang theory", "bikes", "gh", "sd", "cheese", "food", "name", "jack", "chickens", "yikes!", "testing", "this", "is", "a", "questionj", "new", "question", "s");
    echo json_encode($tags);
    

    现在客户端在您的 ajax success 处理程序中获取该响应,并将其直接分配给 tags

    请注意,您可能需要在 ajax 调用中将 dataType 设置为 json,以便 jQuery 自动将响应解析为 json。不确定它是否会自行解决。

    如果你提供一个实际的数组作为你的标签,你也可以摆脱tokenSeparators

    【讨论】:

    • 我完全按照您的说法进行了尝试,并设置了数据类型等,但似乎并没有解决问题。相反,它会输出:puu.sh/5kdo5.png 在文档中指出格式需要是“word”、“word2” - 不确定它是否是一个 json 数组是否重要。我做错了什么吗?非常感谢
    • PHP 脚本的输出是什么?它应该看起来像这样:3v4l.org/53MHH.
    • 这可能会有所帮助:jsfiddle.net/cFRnu。它不执行 ajax 调用,我手动假装有一个 ajax 结果。但是,您可以看到,假设您的 ajax 响应有效且解析正确,您可以像我一样轻松地将其交给 Select2。
    • 嗨,我的 PHP 脚本的输出是这样的:' {"0":"1","1":"2","2":"3","3":" php","10":"tiger","12":"chickens"}' (两端没有单引号)我认为这是错误的格式?我看到你在小提琴中做了什么,但我仍然得到相同的输出。我真的很感谢你的帮助!编辑:现在已经修复了。非常感谢你的帮助!欣赏它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多