2011-02-02 21 views
1

私は質問があります。私はフォーラムの適切な場所に投稿しているかどうかわかりません。 私はAjaxでフォームを作成しようとしています。Ajax Codeigniter可変問題

JavaScriptではビュー

$("#click").click(function(){  
      $.ajax({ 
       type: "POST", 
       url: bseUrl+"counter/incCount", 
       data: click, 
       success: function(html){ 
        alert(html); 
       } 
      }); 
     }); 
から:しかし、問題は、私は、クリック操作を行うたびに、私はいつもここでは、コードの一部が説明だ1

とクリック数を受け取るということです

アラート(html)には、サーバーからの合計クリック数が表示されます。

カウンタ制御

class Counter extends CI_Controller { 

    //put your code here 
    var $numClick; 

    public function __construct() { 
     parent::__construct(); 
     $this->numClick= 0; 
    } 

    public function Counter() { 
     parent::__construct(); 
$this->numClick= 0; 
    } 

    public function incCount() { 
     echo $this->numClick++; 
    } 

public function index() { 
     //loadView 
    } 
} 

しかし、私は変数の内容を毎回負けていますなぜ私がクリックするたびに、私は常に1 とクリック数を受けていますか?私はAjaxコールを行うたびに変数を開始しているようです。

あなたは私を助けることができますか?

+0

このすべての目的は何ですか? – ifaour

答えて

1

クリック処理関数を呼び出すたびにカウンタを再初期化しています - なぜですか? この方法で試してみてください:

//init counter somewhere 
var num_clicks= 0; 
//increase counter and send request 
$("#click").click(function(){ 
      num_clicks++; 
      var click= "numberClick="+num_clicks; 
      $.ajax({ 
       type: "POST", 
       url: bseUrl+"counter/incCount", 
       data: click, 
       success: function(html){ 
        alert(html); 
       } 
      }); 
     }); 
+1

あなたはajaxを呼び出すたびに、新しいapacheプロセスを開始します。これはphpを起動し、codeigniterを読み込み、リクエストをルーティングし、次にコントローラコンストラクタ($ this-> numClick = 0;)を呼び出し、コントローラメソッド"incCount"($ this-> numClickがこの時間までにゼロであると仮定すると、メソッドは "echo 1;"となります)。その後、JSは応答を通知する(1)。 問題を解決するには、NumClickの値をPHPランタイムの外に、外部ファイルやデータベースに格納する必要があります。 incCountメソッドでは、numClickをこの外部ソースから読み込み、インクリメントし、元に戻してからエコーする必要があります。 – thefish

+0

ありがとうございます=)私はそれについて考えました、おそらくAjaxはファイルを再びインスタンス化しますが、わかりませんでした。 – Elkas