問題:
これはバグではなく、自然な動作です。
次の点を考慮してください。
validate_key
アドレス バーに URL を入力して、サーバーに関数を要求します。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.
}