2013-04-06 24 views
-1

即時操作正在爲我自己編寫的程序在我的社區劇院中使用。我們將在控制室(Sound Booth)和電腦後檯安裝一臺電腦。當從其他計算機上按下相應的按鈕時,使用Ajax更改按鈕的顏色

我正在屏幕上顯示10個「按鈕」的網格(更可能是樣式標籤)。會有像「話筒1更換電池」的按鈕文本,這將是一個柔和的灰色:

<a class="g">TEXT</a> 

所期望的目標是,如果控制室點擊這個按鈕時,應該把紅:

<a class="r">TEXT</a> 

這應該改變控制室計算機和後臺,當人後臺再次點擊按鈕時(同時它的紅色),它會在兩個位置恢復爲灰色,讓控制器知道任務已經完成。

我無法想象用數據庫和ajax很難完成,但是im真的比ajax還少新手,所以我不知道最好的方法。如果有人能指向我的教程,我可以很容易地適應這個問題,或者如果有人知道如何做到這一點,可以爲我寫一些簡單的代碼並解釋它。那將是真棒。

+0

這段文字很難看懂 – 2013-04-06 22:43:28

+0

ok我編輯過。希望這樣做更有意義:P – 2013-04-06 22:45:05

+0

您的目標是爲此編寫軟件作爲學習練習或解決軟件問題?如果你只需要一個工具來溝通,我建議一個共享的谷歌文檔或trello板來實現這一點。如果你想學習如何編寫軟件,我會從CodeAcademy開始,並解決這樣的問題。 – mconlin 2013-04-06 23:51:01

回答

1

您可以通過JQuery將一個活動表輪詢到一個從活動表讀取的PHP腳本,並通過這樣做來檢測用戶是否按下了按鈕。一個簡單的方法是這樣的: 用戶按下一個按鈕 - >您將活動以時間戳發送到活動表,以便知道用戶何時按下了按鈕(我們稍後會介紹這一點)。 你可以通過JQuery發送一條信息給PHP,然後將它插入數據庫。 活動表將包含: id(INT),primary,auto_increment。 button(INT)[點擊的按鈕ID] dateposted [timestamp] 現在,每次您使用JQuery和PHP調用該表/調用該表時,都會查詢時間(重要)和按鈕ID ,這是我經常做像這樣:

客戶端:(你可以有一個不同的ID爲像這樣每個按鈕)

var auto_refresh = setInterval(
    function reloadstring() 
    { 
      $.get("checknewactivity.php", function(buttonid){ 
      if (buttonid == 1) /* Say he clicked the record button for example */ 
      { 
       $("#recordbtn").css({"background-color":"#FF0000"}); /* Make the record button red */ 
      } 
      }); 
    }, 1000); // refresh every 1000 milliseconds 
/* And this would poll every 1 second as it says above */ 

服務器端:(checkactivity.php)

<?php 
    checkactivity(); 
    function checkactivity() { 

     $querystats = "SELECT activity.id, activity.buttonid, activity.dateposted FROM activity ORDER BY id DESC LIMIT 1"; 
     $resultstats = mysqli_query($yourdbhandle,$querystats); 
     $num_stats = mysqli_num_rows($resultstats); 
     $rowactivity = mysqli_fetch_assoc($resultstats); 

     if($num_stats > 0) { /* If there was activity */ 

      $activity_id = $rowactivity["id"]; 
       $activity_date = $rowactivity["dateposted"]; //I can't indent this here for some reason. 
      $activity_buttonid = $rowactivity["buttonid"]; 
      $timeactivity = strtotime("$activity_date"); 
      $actualtime = time(); //The actual time in a timestamp 
      $timetoseconds = $actualtime - $timeactivity; //Actual time - timeactivity 

      if($timetoseconds < 6) { /* If the last activity was sent less than 6 seconds ago */ 
       echo "$activity_buttonid"; //This would send the last clicked button id 
      } 
     }      
    } 
?> 

這不是b最簡單的方法,但最好的方法是使用webSockets或node.JS來避免一遍又一遍地輪詢數據庫,一旦服務器發現更新,只發送結果給客戶端。這是一份草稿,並簡要說明了如何做到這一點。

+0

感謝您的迴應! :D只是想確保我有這個權利。用這個設置我的HTML wopuld就這麼簡單: '' 是否正確? – 2013-04-07 00:29:47

+0

是的,你會這樣做。 – 2013-04-07 00:33:14

+0

所以對於每個按鈕我需要重複整個事情嗎?: '$ .get(「checknewactivity.php」,function(buttonid){if(buttonid == 1)/ *說他點擊了記錄按鈕例如*/ {(「#recordbtn2 ... 3..4。etc」).css({「background-color」:「#FF0000」});/*將記錄按鈕設爲紅色*/ } });' 對不起,所有noob問題,但我非常感謝您的輸入 – 2013-04-07 00:39:46