通过AJAX获取Tagify白名单数据报clist未定义错误求助
问题原因
- 变量作用域问题:
clist是在AJAX的success回调函数内部用var声明的局部变量,仅在回调函数内部可访问,外部初始化Tagify时无法读取该变量,因此抛出未定义错误。 - 异步执行顺序问题:AJAX是异步网络请求,代码发送请求后不会等待请求返回结果,会直接执行后续的Tagify初始化逻辑,就算你把
clist改为全局变量,初始化时请求还没返回,clist也没有有效值。
解决方案
直接把Tagify的初始化逻辑移到AJAX的success回调内,拿到接口返回的标签数据后再初始化组件即可。如果接口返回的是字符串格式的数组,记得先转成JSON对象。
修正后代码示例:
$.ajax({ url: '/ajaxget/tags', method: 'GET', data: { '<?= csrf_token() ?>' : '<?=csrf_hash()?>' }, success: function(response) { // 若接口返回的是字符串格式数组,先打开下方注释做转换 // var clist = typeof response == 'string' ? JSON.parse(response) : response; var clist = response; var input = document.querySelector('input[name="tags"]'); tagify = new Tagify(input, { enforceWhitelist: true, whitelist: clist, maxTags: 5, dropdown: { maxItems: 5, classname: "tags-look", enabled: 0, closeOnSelect: false } }); } });
如果需要提前初始化Tagify,后续再更新白名单,也可以在success回调内通过tagify.whitelist = clist的方式更新配置。
内容的提问来源于stack exchange,提问作者Secux
相关产品推荐
相关产品推荐

