Select2 -> L'entrée dynamique renvoie sous forme de chaîne (jQuery
-
21-12-2019 - |
Question
Le format de mon select 2 est le suivant :
$("#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"]
});
Ce qui montre comme tel :
MAIS, lorsque j'essaie d'attribuer dynamiquement des données dans la boîte via AJAX en utilisant ce code :
$.ajax({
type: "POST",
url: "grabTags.php",
data: "tags="+$("#selectPretty").val(),
success:
function(msg2) {
alert(msg2);
$("#selectPretty").select2({
tokenSeparators: [","],
tags:[msg2]
});
}
});
Cela sortira comme ceci :
Pour une raison quelconque, la chaîne entière est une option et je ne peux pas faire exploser le résultat en différentes options...
Est-ce que quelqu'un sait ce que je peux faire ici ?
Notez que 'tags:[msg2]' est renvoyé par mon fichier grabTags.php et 'msg2' = "1", "2", "3, etc...
Meilleures salutations
La solution
Avez-vous essayé de diviser la chaîne qui revient du PHP ?
Vous pouvez invoquer le split
méthode sur une chaîne (telle que celle renvoyée par votre PHP) et transmettez-lui un séparateur (dans votre cas, un ,
).
Quelque chose comme ceci devrait fonctionner :
$.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
});
}
});
Autres conseils
Le Sélect2 tags
besoin d'un javascript tableau, pas seulement une chaîne entourée de crochets.
Donc côté serveur, demandez à PHP de cracher un tableau codé en 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);
Maintenant, côté client, prenez cette réponse dans votre ajax success
gestionnaire et attribuez-le directement à tags
.
Notez que vous devrez peut-être définir dataType
à json
dans votre appel ajax afin que jQuery analyse automatiquement la réponse en tant que json.Je ne sais pas s'il comprendra cela tout seul ou non.
Vous pourrez peut-être également vous débarrasser de tokenSeparators
si vous fournissez un tableau réel comme balises.