如何用JS获取友好URL中的参数?调用getUrlParameter报错如何解决
问题排查与修复方案
1. 前端JS报错根因修复
你遇到的val_usu未定义问题分为两种场景:
- 场景1:你没有自行实现
getUrlParameter方法,原生JS不存在这个内置API,调用不存在的函数会抛出引用错误,导致变量赋值失败。 - 场景2:你实现了该方法,但方法只支持获取
?后面的查询参数,而你当前的URL是路径式参数,id_u的值27是路径段,不存在于查询参数中,方法返回undefined导致变量值异常。
修复代码:
新增路径参数获取方法,同时修正原有JS的逻辑问题:
// 新增:从当前URL路径中获取id_u参数 function getUserIdFromPath() { const pathSegments = window.location.pathname.split('/') // 路径结构为 /admonCapacitacion/cursos/cursosUsuario/27,取最后一段即为id_u return pathSegments[pathSegments.length - 1] } function recorrerListaInsertCursos(){ var listaChecksAddCursos = ''; $("input[name=checkbox2]").each(function (index) { if($(this).is(':checked')){ listaChecksAddCursos += $(this).val() + ','; } }); // 去掉末尾多余的逗号 listaChecksAddCursos = listaChecksAddCursos.slice(0, -1); const val_usu = getUserIdFromPath(); console.log(val_usu); location.href = "../insertCoursesUser/" + listaChecksAddCursos + "&" + val_usu; // 修正返回值,原变量listaChecks未定义 return listaChecksAddCursos; }
2. .htaccess规则修复
你的重写规则顺序错误,通用后缀添加规则优先级高于业务规则,导致业务路径映射完全不生效,同时规则匹配规则写错,无法匹配无后缀的路径。
修复后的配置:
Options -Indexes <IfModule mod_rewrite.c> RewriteEngine on RewriteBase /admonCapacitacion/ RewriteCond %{REQUEST_URI} !^admonCapacitacion/c/css.*$ RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RedirectMatch ^/(.*?)/$ /$1 # 业务规则放在前面,加[L]标记匹配后停止后续匹配 RewriteRule ^cursos/cursosUsuario/(.+)$ cursos/cursosUsuario.php?id_u=$1 [L] RewriteRule ^cursos/insertCoursesUser/(.+),&(.+) cursos/insertCoursesUser.php?idsAddCourse=$1&id_u=$2 [L] # 通用加.php后缀规则放在最后 RewriteRule ^(.*)$ $1.php [L] </IfModule>
内容的提问来源于stack exchange,提问作者Luis Alberto
相关产品推荐
相关产品推荐

