如何检测jQuery Ajax返回的data.accesslocations是否包含指定字符串
问题原因
你写的data.accesslocations.contains("test")无法生效,核心原因是 JavaScript 原生字符串类型没有内置contains()方法,这个方法是DOM元素的专属方法,不能直接用来判断字符串的包含关系。
正确实现方案
针对你判断逗号/换行分隔字符串中是否存在指定关键词的场景,可直接使用以下内置方案实现:
1. 常规场景推荐:ES6 原生includes()方法
所有现代浏览器全支持,是目前最直观的字符串包含判断内置方法,直接返回布尔值结果:
// 默认大小写敏感,以下写法匹配全小写的"test" if (data.accesslocations.includes("test")) { // 命中关键词后的业务逻辑 }
如果需要忽略大小写匹配(同时覆盖Test、TEST、test等不同大小写形式),可以先把字符串统一转为小写/大写再判断:
if (data.accesslocations.toLowerCase().includes("test")) { // 不区分大小写匹配关键词 }
2. 老旧环境兼容:indexOf()方法
如果需要兼容IE等不支持ES6语法的老旧环境,可以用全版本JS都支持的indexOf()方法:该方法会返回匹配内容的起始下标,找不到目标字符串时固定返回-1。
if (data.accesslocations.indexOf("test") !== -1) { // 匹配成功逻辑 } // 忽略大小写版本 if (data.accesslocations.toLowerCase().indexOf("test") !== -1) { // 匹配成功逻辑 }
3. 精确匹配独立项(避免子串误判)
如果你的需求不是模糊子串匹配,而是要精确命中accesslocations里拆分后的某一个独立值(比如避免把TestABC误判为命中Test),可以先把字符串按逗号、换行拆分为数组再判断:
// 按逗号、换行拆分字符串,同时去除每项前后的空白字符 const locationList = data.accesslocations.split(/[\n,]/).map(item => item.trim()); if (locationList.includes("Test")) { // 仅当独立项完全等于"Test"时才触发逻辑 }
修正后的核心代码片段
把原AJAX请求success回调里的判断部分替换即可:
success:function(data){ // 替换原失效的contains判断,此处以不区分大小写匹配为例 if(data.accesslocations.toLowerCase().includes("test")){ // 自定义命中后的业务逻辑 } $('#employee_id_update').val(data.row_id); $('#insert').val("Update"); $('#new_data_Modal').modal('show'); },
内容的提问来源于stack exchange,提问作者Codec737
相关产品推荐
相关产品推荐

