2013-04-12 99 views
0

我正在做一个小型的个人网络投资组合,以学习网站开发。我列出了所有“买入”的股票,我想从雅虎财经实时更新价格。我已经可以进行价格更新了,但是我重写了使用javascript调用新的库存的表格。使用ajax更新股票价格

我知道必须有一个更清洁的方式。我正在尝试使用javascript更新价格,但我认为我没有做正确的事情。

这是我到目前为止。

Portfolio.php显示所有我

<?php foreach ($shares as $row): ?> 

     <tr > 
     <td><?php echo $row["symbol"];?></td> 
     <td><a href="funds.php" id="<?php echo $row["symbol"]?>"><?php echo $row["name"];?></a></td> 
     <td style="text-align: right;"><?php echo $row["shares"];?></td> 
     <td id="price" style="text-align: right;">$ <?php echo number_format($row["price"],2);?></td> 
     <td style="text-align: right;"><?php 
     $change = number_format($row["change"],2); 
     echo sprintf("%+1.2f", $change); 
     echo " ("; 
     echo $row["pct"]; 
     echo " )"; 
     ?></td> 
     <td style="text-align: right;">$ <?php echo $row["dayGain"];?></td>  
     <td style="text-align: right;">$ <?php echo number_format($row["total"],2);?></td> 
     </tr> 

<?php endforeach; ?> 

</table>  
<script type="text/javascript" src="../html/js/update.js" ></script> 

股票然后,我有update.php返回从雅虎财经的所有股票信息作为JSON

<?php 
// configuration 
require("../includes/config.php"); 

//query user's portfolio 

$rows = query("SELECT * FROM shares WHERE id = ?", $_SESSION["id"]); 
$cash = query("SELECT cash FROM users WHERE id = ?", $_SESSION["id"]); 

    //create array to store the shares 
    $shares = array(); 

    //for each of the user info 
    foreach($rows as $row){ 

     $yql_base_url = "http://query.yahooapis.com/v1/public/yql"; 

     $yql_query = "select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22".$row['symbol']."%22)%0A%09%09"; 

     $env = "env=http%3A%2F%2Fdatatables.org%2Falltables.env"; 
     $yql_full_query = $yql_base_url . "?q=" . $yql_query . "&format=json&" . $env; 
     $session = curl_init($yql_full_query); 
     curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
     $json = curl_exec($session); 
     $stock = json_decode($json); 

     if($stock->query->results !== false){ 

      $shares [] = array(

       "symbol" => $stock->query->results->quote->symbol, 
       "price" => $stock->query->results->quote->LastTradePriceOnly 

      ); 

     } 

    } 
    $return = array("price" => $shares); 
    echo json_encode($return); 

?> 

而第三个文件是update.js我试图让javascript

$(document).ready(function(){ 
function stock() { 
     $(function() { 
      $.getJSON('../update.php',function(result){ 
      $("div#price2").html(result.price); 

     }); 
    }); 
     stock(); 
     setInterval(stock(), 10000); 

    }); 
}); 

如果我直接转到u pdate.php我可以将价格视为json。我认为问题在于update.js文件,但我无法弄清楚问题所在。我甚至无法在price字段中输出update.js中的Hello。

我想要做的是显示我存储在数据库中的股票,然后使用ajax和javascript更新价格。任何帮助,将不胜感激。提前致谢。

+2

在你的html中没有任何地方出现一个id为'price'的元素,所以你的成功函数基本上什么都不做。 –

回答

2

使用PHP的加上一个.getJSON JSON功能更新...以下是一些示例代码:

// pull_stock_price.php 
<?php 
$return = array("content" => "New Stock Price: $2000"); 
json_encode($return); 
?> 

// Jquery to pull stock price once every 10 seconds: 
function stock() { 
    $(function() {$.getJSON("pull_stock_price.php",function(result){ 
    $("#StockPrice").html(result.content); 
}); 
}); 
stock(); 
setInterval(stock, 10000); 

// HTML! 
<td><div id="StockPrice"></div></td> 

这个作用:每10秒钟用户的浏览器将拉动pull_stock_price.php,并将采取从json提供的内容和更新。你可以从数据库中拉出pull_stock_price.php,或者在任何地方卷曲或者将数据格式化为你想要的形式。

+0

我用你的建议修改了我的代码,但我仍然没有在#price中显示任何内容。我可以从update.php回显json,但我不知道如何显示js文件中的任何内容,以查看它是否从update.php获取任何内容。 – tironci

+0

如果您有URL或某些示例代码,我会很乐意采取看。 –

+0

我把3个文件放在pastebin中。请看一下。 http://pastebin.com/pi5w8BRi – tironci