2012-03-13 8 views
3

私はajaxについて多くの研究をしてきましたが、コードギターで別のajaxレイヤーを作成する方法についてはあまり見当たりません。チュートリアルビデオを実行する人々のディレクトリツリーにajaxコントローラがありますcodeigniter上では、本当の説明を得られませんでした。私はカプセル化を促進し、javascriptを有効にしたユーザーだけに表示することを前提としています。自分のプロジェクトで使用するためにコントローラーで実装する方法についてはわかりません。CodeIgniter Ajax Layer

答えて

5

すべては、あなたが何をしているかによって異なります。最も簡単な方法は、私の意見では、AJAXコントローラとURLを別々にするのではなく、コントローラの要求を検出して、通常とは異なるものを出力することです。 Input classは、この機能を持っている:コントローラメソッドで

/** 
* Is this an ajax request? 
* 
* @return  bool 
*/ 
define('AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest'); 

使用例:私は定数を使用することを好む

/** 
* Is ajax Request? 
* 
* Test to see if a request contains the HTTP_X_REQUESTED_WITH header 
* 
* @return boolean 
*/ 
public function is_ajax_request() 
{ 
    return ($this->server('HTTP_X_REQUESTED_WITH') === 'XMLHttpRequest'); 
} 

$data = $this->some_model->get(); 
if ($this->input->is_ajax_request()) 
{ 
    // AJAX request stops here 
    exit(json_encode($data)); 
} 
$this->load->view('my_view', $data); 

この道を、あなたはしないでください同一または類似のアプリケーションロジックが異なるコントローラを使用して分散され、コードをよりメンテナンス可能にすることができます。たとえば、標準のHTMLフォームはAJAXを使用して同じ場所に投稿でき、出力が異なるため、progressive enhancementをより簡単でクリーンにすることができます。さらに、ユーザーから「隠す」必要がある「AJAXのみ」のURLはありません。

0

私は過去に使用した簡単なソリューションを提供しようとします。しかし、私はCodeIgniterの習熟度/熟知度については不明ですが、これはCodeIgniterの問題に対処するために開発した独自の「自家製」ソリューションです。

私はCodeIgniterがシンプルで小さなフットプリントが好きです。しかし、私が使用していない機能のいくつかは:私はコントロールのフリークやSQLインジェクションのようなものですので、私は提供されたデータベース接続システムを使用していないので、流行している。だから私はこの理由のためにフレームワーク内で逸脱する方法を学んだ。

AJAX処理を格納する別の「レイヤー」を作成し、それをきれいに整えて実装するために、AJAX要求に応答する特定のジョブを持つ別個のコントローラーオブジェクトを作成します。このように、あなたの "Webページ"コントローラは "Ajax"コントローラとは別のものです。

class Ajax extends CI_Controller 
{ 
    function __construct(){ parent::__construct();} 
    function webserv(){ /* Your Web Service code here... */} 
} 

その後、あなたはこのURLにあなたのAJAX要求を指示します:

http://www.example.com/ajax/webserv/

+0

ので、*すべて*あなたのサイトのAjax機能を1つの巨大なコントローラにパックされましたか?あなたのアプリケーションが成長するにつれてそれはかなり混乱するようです。どちらか、それとも、あなたはAJAXをあまり使用していません。 –

+0

@Madmartigan私たちは再び会います。それはアプリケーションに依存します - 私は特定の状況でAJAXを使用しています。なぜなら、AJAXがWebサイト全体に対して7つ以下のAJAXコールを必要とするとしたら、それらを1つの "モノリシック" AJAXコントローラにグループ化します。 AJAXの豊富なWebアプリケーションAjaxコントローラの並列システムを設定しました。ページコントローラとAjaxコントローラの1:1の比率です – hypervisor666

+0

ええ、私は名前/アバターを認識していると思っていました。から? –

関連する問題