2013-08-18 95 views
0

我想刷新兩個名爲profittext和sumtext的變量,每隔幾秒刷新並在以下位置進行回顯。我知道AJAX需要做到這一點,但我怎麼才能使它工作?我發現的唯一方法是刷新整個文件的內容。有沒有什麼辦法刷新特定的變量?任何答案將不勝感激。非常非常感謝你。每秒刷新一個變量

<table> 
if($profitandloss<$zero) { 
    $profitText = "<div style=\"color: red;\">$profitandloss</div>"; 
} elseif ($profitandloss>$zero) { 
    $profitText = "<div style=\"color: green;\">$profitandloss</div>"; 
} 
// for profit and loss counting 

$sum+= $profitandloss; 
// 

echo "<tr><td>" . $row['trade_id'] .   
     "</td><td>" . $row['selection'] . 
     "</td><td>" . $row['date'] . 
     "</td><td>" . $row['type'] . 
     "</td><td>" . $row['size'] . 
     "</td><td>" . $row['bidprice'] . 
     "</td><td>" . $row['offerprice'] . 
     "</td><td>" . $row['stoploss'] . 
     "</td><td>" . $row['takeprofit'] . 
     "</td><td>" . $profitText . 
     "</td><td><a href ='delete.php?id=". 
     $row['trade_id']."'>X</a> 
    </td></tr>"; 

$profitandloss=0; 

if($sum<$zero) { 
    $sumText = "<div style=\"color: red;\">$sum</div>"; 
} elseif ($sum>$zero) { 
    $sumText = "<div style=\"color: green;\">$sum</div>"; 
} 
} 
echo "</table><br>"; 
?> 
<!DOCTYPE html> 
<html> 
<table style="border:1px solid black;"> 
<tr> 
<th style="border:1px solid black;">Profit/Loss</th> 
</tr> 
<tr> 
<td style="border:1px solid black;"><?php echo $sumText ;?></td> 
</tr> 
</table> 
</html> 
+0

下面的答案給你一個良好的開端。你也可以使用一個包裝這個功能的JavaScript庫。看看這個熟悉 - http://api.jquery.com/load/ – JohnP

回答

0

你會needd兩個PHP頁面: - 一個用HTML和JS,其中定期對使Ajax調用,並將結果向HTML - 第二位你的動態數據塊的json(甚至是純文本)輸出

不幸的是,在答案中寫出完整的代碼並不是人們在做stackoverflow的時候,所以看看下面的小例子,並試圖找出ou缺少的部分。

http://jsfiddle.net/AMEqz/

var xhr = new XMLHttpRequest(); 
xhr.onload = function(r) { 
    // your render logic HERE 
    setTimeout(send, 1000); 
} 
function send() { 
    xhr.open("GET", "/", true); 
    xhr.send(); 
} 
send(); 

PS:記住,每一個Ajax請求將意味着你的服務器額外的連接,所以一定要確保它可以處理的負荷;)

+0

你是什麼意思的渲染邏輯?即時通訊不是精通JavaScript! – nigel

+0

將數據放入html的部分,因此對用戶可見。 ('b.innerText'在我的小提琴的情況下) – c69

+0

我真的不知道如何做到這一點...我將不勝感激,如果你能幫助我 – nigel

2

我的概念掙扎當我第一次開始時如何構造這樣的代碼。雖然它不是特定於您的特定變量,但下面是如何使用jQuery/PHP通過AJAX更新var的簡單示例。

序幕:如果這是你將要經常做的事情,你要學習jQuery的,而不是單獨使用普通的JavaScript。關於如何學習jQuery,有很多很棒的免費資源。另外,如果你對在線免費教程不滿意,this是一本很好的書。我將在jQuery中編寫示例。

設計:好了,所以它的工作方式是這樣的:

  • 在JavaScript中設置一個計時器,以執行特定的功能每X秒(你不想做的每一秒鐘)。

  • 該函數對服務器上的.PHP文件進行AJAX調用(使用jQuery),向其發送必要的數據,以便.PHP代碼知道要發回的內容。

  • .PHP代碼抓取所需的數據(例如,使用MySQL)以JSON格式對其進行編碼,然後退出。

  • 對AJAX調用的承諾被觸發,並從PHP發送的數據被接收。如你所願處理它。

  • 從第2步

如果你有什麼代碼做任何的問題重複,請詢問。

AJAX。PHP

<?php 

$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

$return_obj = array(); 
$request_obj = NULL; 

// our AJAX call used "POST" as it's 'type', so we look in that 
// variable. 
if (array_key_exists("func",$_POST)) { 

    if ($_POST['func'] === "get_update") { 

     if (array_key_exists("which_var",$_POST)) { 

      $which_var = $_POST['which_var']; 
      $which_var = $mysqli->real_escape_string($which_var); // should use prepared statements 

      // we sent 'num_people_logged_in' as our value here, so we'll be looking for a column/field 
      // with that value. this assumes that some other code, somewhere else, 
      // is regularly updating the table. it also assumes that there will only 
      // be a single row returned, which will hold the value. 
      $query = "SELECT '$which_var' FROM site_stats "; 
      if ($result = $mysqli->query($query)) { 

       if ($row = $result->fetch_assoc()) { 
        $request_obj[$which_var] = $row[$which_var]; 
       } 
      } 
     } 
    } 
} 

$return_obj['request'] = $request_obj; 
echo json_encode($return_obj); 
die(); 

?> 

MYCODE.JS

// this actually sends the AJAX request to the server. 
function getUpdate() { 

    var jqXHR = $.ajax({   
     url : "ajax.php", 
     data : { 
      'func' : 'get_update', 
      'which_var' : 'num_people_logged_in' 
     }, 
     dataType : 'json', 
     type : 'POST', 
     timeout : 10000 
    }); 

    // attach 'promises' to the jqXHR object, which represents 
    // the AJAX call itself. 'promises' are, in this context, 
    // just events. 

    jqXHR.done(function(data,textStatus,jqXHR) {   

     // this executes if the AJAX call succeeded. 
     // the variable 'data' holds what the server 
     // sent us. 
     if ((data) && (data.request)) { 
      receiveUpdate(data.request); 
     } 
    }); 

    jqXHR.fail(function(jqXHR,textStatus,errorThrown) { 

     // this executes if it failed 
     console.log("Fail: " + textStatus + " (" + errorThrown + ")"); 
    }); 

    jqXHR.always(function(a,textStatus,c){      

     // this executes either way, after .done or .fail 
    }); 
} 

// this is called from jqXHR.done, on success 
function receiveUpdate(request_obj) { 
    if (request_obj.num_people_logged_in) { 
     updateDOM(request_obj.num_people_logged_in); 
    } 
} 

function updateDOM(num_people_logged_in) { 
    if (num_people_logged_in) { 
     $("#mydiv > p.update").html("The updated value is: " + num_people_logged_in); 
    } 
} 

var timeoutID = null; 

// setup our timer, to periodically make an 
// AJAX call 
function init() { 
    timeOutID = setInterval(function(){ 
     getUpdate(); 
    },5000); 
} 

// stop the timer 
function cleanup() { 
    clearTimeout(timeoutID); 
} 

INDEX.HTML

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset='utf-8'> 
    <title>AJAX practice</title> 

    <!-- <link href="mycss.css" rel='stylesheet'> if needed --> 

    <script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
    <script src="mycode.js"></script> 
    <script> 

     $(document).ready(function() { 

      init(); 

      $("#cleanup").on("click",function(){ 
       cleanup(); 
      }); 

     }); // end ready 

    </script> 
</head> 

<body> 

    <div id='mydiv'> 
     <p> 
      How many people are online? 
     </p> 
     <p class='update'> 
     </p> 
    </div> 

    <button id='cleanup'>Stop updating!</button> 

</div> 
</body> 
</html>