Select2 -> Dynamische Eingabe wird als String zurückgegeben (jQuery
-
21-12-2019 - |
Frage
Das Format für meine select 2 ist als solches:
$("#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"]
});
Was sich als solches zeigt:
ABER wenn ich versuche, der Box mithilfe dieses Codes Daten dynamisch über AJAX zuzuweisen:
$.ajax({
type: "POST",
url: "grabTags.php",
data: "tags="+$("#selectPretty").val(),
success:
function(msg2) {
alert(msg2);
$("#selectPretty").select2({
tokenSeparators: [","],
tags:[msg2]
});
}
});
Es wird so herauskommen:
Aus irgendeinem Grund ist die gesamte Zeichenfolge eine Option und ich kann sie nicht dazu bringen, das Ergebnis in verschiedene Optionen aufzuteilen...
Weiß jemand, was ich hier tun kann?
Beachten Sie, dass 'tags: [msg2]' von meinen grabTags zurückgegeben wird.php-Datei und 'msg2' = "1", "2", "3, usw...
Mit freundlichen Grüßen
Lösung
Haben Sie versucht, die Zeichenfolge zu teilen, die vom PHP zurückkommt?
Sie können das aufrufen split
methode für einen String (wie den, der von Ihrem PHP zurückgegeben wird) und übergeben Sie ihm ein Trennzeichen (in Ihrem Fall ein ,
).
So etwas sollte funktionieren:
$.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
});
}
});
Andere Tipps
Der Select2 tags
benötigen Sie ein Javascript Array, nicht nur eine Zeichenfolge, die von Klammern umgeben ist.
Lassen Sie PHP also serverseitig ein json-codiertes Array ausspucken:
$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);
Jetzt nehmen die Client-Seite diese Antwort in Ihren Ajax auf success
handler, und weisen Sie es direkt zu tags
.
Beachten Sie, dass Sie möglicherweise Folgendes einstellen müssen dataType
zu json
in Ihrem Ajax-Aufruf, damit jQuery die Antwort automatisch als json analysiert.Ich bin mir nicht sicher, ob es das alleine herausfinden wird oder nicht.
Möglicherweise können Sie auch loswerden tokenSeparators
wenn Sie ein tatsächliches Array als Tags angeben.