You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JavaScript方法调用控制器?我的代码及路由配置存在什么问题?

问题分析与修复方案

我帮你梳理下代码里的几个问题,一步步来解决:

1. JavaScript 里的 DOM 元素取值错误

你当前的代码里,document.getElementById('searchBox')获取的是DOM元素对象,不是输入框里的文本值,所以后续的空值判断完全不对。需要改成获取元素的.value属性,还要考虑用户输入空格的情况,用.trim()去掉首尾空格:

function find_country(){ 
  // 获取输入框的文本值,同时去除首尾空格
  var country_name = document.getElementById('searchBox').value.trim(); 
  if(country_name === "") {
    window.location.href = "https://localhost/teacherprivate"; 
  } else {
    window.location.href = "<?php echo base_url('country-');?>" + country_name; 
  }
}

2. 路由配置里的多余参数

你的路由规则是:

$route['country-([a-zA-Z_-]+)']='Countries/get_countries_by_searchword/$1/$2';

这里的问题是,路由里只捕获了一个参数(([a-zA-Z_-]+)对应$1),但你却给控制器方法传递了$1/$2,$2是不存在的,会导致控制器方法接收参数时出错。应该改成只传递$1:

$route['country-([a-zA-Z_-]+)']='Countries/get_countries_by_searchword/$1';

3. 控制器方法的参数匹配

确保你的Countries控制器里的get_countries_by_searchword方法只定义一个参数,比如:

public function get_countries_by_searchword($searchWord) {
  // 这里处理你的搜索逻辑
}

额外建议

  • 可以给输入框添加表单提交事件,或者用addEventListener绑定事件,比直接调用函数更规范。
  • 注意URL里的特殊字符,比如用户输入带空格的国家名,最好用encodeURIComponent处理一下,避免URL解析错误:
window.location.href = "<?php echo base_url('country-');?>" + encodeURIComponent(country_name);

内容的提问来源于stack exchange,提问作者Kinan Milani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:42:53