问题:
这不是错误,这是一种自然行为。
考虑以下:
您可以通过在地址栏中输入 URL 来向服务器请求该validate_key
功能。current_url()
返回localhost/blabla/validate_key
。不涉及 AJAX。
validate_key
使用 AJAX请求。将执行相同的 PHP 代码。即使您的浏览器的地址栏显示
,current_url()
也会更改为。localhost/blabla/validate_key
localhost/blabla/box/21
那么,这意味着什么?这意味着 Codeigniterbase_url()
不关心您的地址栏,它关心它所在的功能,无论是通过ajax
还是正常请求调用。
所以只要这个函数正在执行,URL 就指向它。
解决方案:
对于这种情况,我最喜欢的解决方案是简单地创建一个隐藏输入。
简单地说,当用户请求该box
功能时。你正在向他展示一个弹出式表单。所以添加一个hidden_input
字段,给它一个名称和一个值 21(取决于)。
例如(您应该根据您的特定需求进行定制):
在函数显示的视图中将此添加到表单中box
:
form_hidden("number", $this->uri->segment(3));
;
现在这些数据将被发送到您的validate_key
函数。我们如何访问它?这很简单!
function validate_key(){
$this->input->post("number");//returns 21 or whatever in the URL.
//OR if the form sends GET request
$this->input->get("number");//return 21 or whatever in the URL.
/*
*Or , you can do the following it's considered much safer when you're ONLY
*expecting numbers, since this function(intval) will get the integer value of
*the uri segment which might be a destructive string, so if it's a string
*this function will simply return 0.
*/
$number = intval($this->input->post("number"));//returns 21 or whatever in the URL.
//Or if it it GET request:
$number = intval($this->input->get("number"));//returns 21 or whatever in the URL.
}