0

Codeigniter を始めたばかりで、大規模なアプリケーションを計画しています。CI が JS ファイルと AJAX リクエストを処理する方法について少し混乱しています。

プロジェクトで mod_rewrite を使用しています。

  1. 通常の Web ページでは、ドキュメントのヘッダーで個別の JS スクリプトを参照して、コードを分離してクリーンに保ちます。私は mod_rewrite を使用しているので、ファイルを見つけるために URL ヘルパーの関数が必要です。別の js ドキュメントでは、php を実行しないため、これは問題です。では、AJAX 呼び出しに関して言えば、site_url() 関数を使用していないときに、JS ファイルから PHP コントローラー関数を参照するにはどうすればよいでしょうか?

  2. AJAX からはアクセスできるがアドレス バーからはアクセスできない関数を作成するにはどうすればよいでしょうか。では、ユーザーコントローラーがあるとしましょう。ユーザー/写真に移動すると、その写真を見ることができます。ユーザー/友達に行くと、その友達を見ることができます。しかし、User/getData にアクセスして、出力されたすべての生データを確認できるようにしたくありません。

tl;dr 別のドキュメントと mod_rewrite を使用する場合の標準的な JS と AJAX のプラクティスは何ですか?

乾杯。

4

2 に答える 2

1

私が個人的に行っているのは、次のような js 宣言の前に、テンプレートのヘッダー セクションで js 変数を宣言することです。

var base_url = <?=base_url()?>

これbase_urlは、統合した任意の js ファイルからアクセスできます。2 番目のポイントについては、次のようにいつでもコントローラーからユーザーをリダイレクトできます。

public function some_function(){
    if($this->input->post(null)){
        //your ajax code here
    }else{
        redirect(base_url(), 'refresh')
    }
}
于 2013-07-10T13:20:47.817 に答える
1

I also declare a js variable in the <head> like

var baseUrl = '<?php print(base_url()); ?>';

Then when you do your AJAX call you can call the controller like

baseUrl + 'controller/method'

In terms of making sure that methods can only be called from AJAX calls and not through the address bar one option is to send a post value and check for this before you do anything like

if($this->input->post('ajax_call'))
{
     //Do something
}

If you put all your ajax methods into the same controller you'd only have to have this check once in the __construct()

于 2013-07-10T13:36:28.907 に答える