2012-01-17 13 views
0

CakePHP 2.0とAjaxで簡単な投票を作成しようとしています。私はこのフレームワークの初心者ですので、私は本当に難しいと思っています。CakePHP 2.0でajaxで簡単投票を作成する方法

私は、テーブル内のフィールド "numberVotes"を更新するためにコントローラでアクションを呼び出すアクションを呼び出すリンクを作成したいとします。データベース

私はそれを試していますが、私はそれをうまくやっているのか分かりません。 私は今、これを持っている:

//posts/view.ctp ます$ this-> HTML->スクリプト( 'votar'、配列( 'インライン' =>偽)); //これは、レイアウト

echo '<div id=\'vote\'>'; 
    echo $this->element('vote', array('id' => $post['Post']['id'])); 
echo '</div>' 

要素/ vote.ctp

if(!empty($voting)){ 
echo "You have voted!!!"; 
}else{ 
echo '<a href="#" onclick="votar(\''.$id.'\');return false;">Vote here!!</a> 
} 

ウェブルート/ JS/vote.js

//XMLHttpRequest Ajax 
function newAjax() 
{ 
var xmlhttp=false; 
try 
{ 
    xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
} 
catch(e) 
{ 
    try 
    { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    catch(E) { xmlhttp=false; } 
} 
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest();  } 
return xmlhttp; 
} 


function voting(num) { 
var url; 
var obCon = document.getElementById('vote'); 
var ajax = newAjax(); 

url = 'http://localhost:8888/mysite/posts/voting/' + num; 
alert(url); 
ajax.open("GET", url); 

ajax.onreadystatechange=function(){ 
    if(ajax.readyState==4){ 
     if(ajax.status==200){ 
      obCon.innerHTML=ajax.responseText; 

     }else if(ajax.status==404){ 
      obCon.innerHTML = "Page not found"; 
     }else{ 
      obCon.innerHTML = "Error:"+ajax.status; 
     } 
    } 
} 
ajax.send(null); 

}

上にロード//コントローラ/ PostsCont

public function voting($id = null){ 
      ... //stuff to add the vote in the DB 
    $this->set(array('id' => $id, 'voting' => 'yes')); 
    $this->render('/Elements/vote', false); 
} 

roller.php私は私はAJAXのためのCakePHPの電源を使用していないと確信しています...しかし、私はそれを適用することができますまたはそれを行う方法をどこ知りません。 提案がありますか?

ありがとうございました。

+0

を、または氏名で人/主題に投票することもできます。あなたの投票システムをもう少し詳しく説明できますか?また、どのようなエラーが発生したか教えてください。単純に何かを掲示し、 'それは動作していない'または 'それをより良くする'と言っても、ここではStackoverflowで大きな注目を集めることはありません。 – Vigrond

答えて

1

それはあなたが設定し、この投票システムをしたいが、ここであなたは正しい方向に向かって取得するためにいくつかの例がどのように正確に私には完全には明らかではありません。

使用CakePHPのJSヘルパーのセットアップに全体AJAX要求。

私たちは、IDが「リンクID」とのリンクのクリックイベントにAJAX要求をバインドします。このリクエストは普通のリクエストのようにあなたのコントローラーに向かいますが、CakeのデフォルトのAJAXレイアウトを使用する必要があります。リクエストの結果はhtmlの単なる塊でなければなりません。 #content div。

これは、ビューファイルに行く:

<?php 
$this->Js->get('#link-id'); 
$this->Js->event(
    'click', 
    $this->Js->request(
     array('action' => 'vote', $post_id), //this is effectively www.yourdomain.com/posts/vote/1 (if the post_id is 1) 
     array('async' => true, 'update' => '#content') 
    ) 
); 
?> 

あなたのコントローラは、このようなものになります。私は本当にあなたは、人々がYesまたはNoを投票することができますしようとしているかどうかわかりません

<?php 
function vote($id) { 
    //update your number in the database 
    if(/* the update was a success */){ 
     $this->set('message', 'Thank you for voting!'); 
    } else { 
     $this->set('message', 'Try again.'); 
    } 

    //then in vote.ctp, echo $message somewhere 
    //the result of vote.ctp will replace #content on your page 
} 
?> 
関連する問題