有沒有人試過巢狀的JS包法,語法如下:
<script lang='js'><script lang='js src='test.php?ref=a'></script></script>
目的是要當每執行一次外面JS的功能時,去調用test.php?ref=a內echo JS變數=php變數值的內容
目前搭配While已經可以將數據傳到另一個頁面,但出現外面JS的繪圖功能沒法使用
還是有神人有更好的解決方式 謝謝
$.get('text.php',function(data){
//data就是取回的變數值或是JSON物件
});
p = <?php echo '{ref:'.(isset($_GET['ref']))? '"'.$_GET['ref'].'"':'""'.'}'
<script lang='js src='test.php?ref=a'></script>
<script lang='js'>
setInterval(function() {
if (typeof p != 'undefined') {
// 拿 p 變數做事
}
}, 1000); // <--時間間隔
</script>
<?php
$Seqg=$_GET["s"];
//echo "document.write('".$Seqg."');";
$link = mysql_connect("127.0.0.1", "帳號", "密碼") or die("糟糕!無法連上資料庫喔!" . mysql_error());
$sql="select * from m where Seq = '".$Seqg."'";
$result=mysql_db_query("DATABASE",$sql,$link);
$data=mysql_fetch_array($result);
if ( !$data )
$Vg = 0;
else
$Vg = $data[V];
echo "var y = ".$Vg.";\n";
?>
<?php
定義$Seqg的數值
?>
<script type="text/javascript">
// we use an inline data source in the example, usually data would
// be fetched from a server
var data = [], totalPoints = 300;
function getRandomData() {
if (data.length > 0)
data = data.slice(1);
// do a random walk
while ( data.length < totalPoints ) {
if ( data.length == 0)
n = <?php echo $Seqg; ?>;
else
n++;
//已經接收到數據,差在不能繪圖!(也就是最外層的JS不能動作)
document.write('<script type=\"text\/javascript\" src=\"select.php?s='+ n +'\"><\/script>');
data.push(y);
delete y;
}
// zip the generated y values with the x values
var res = [];
//document.write(data.length);
for (var i = 0; i < data.length; ++i)
res.push([i, data[i]])
return res;
}
}
剩下Code為繪圖且定時更新的部分...
</script>
第一:Javascript Tag不能這樣巢狀使用。
第二:請盡量不要使用document.write,除非你很清楚你在做什麼。用php來產生前端的code還比較不會出問題...
第三:如果是要繪圖的話,取一個值就要去資料庫撈一次,這種做法太花時間了。建議每次要把所有資料一次讀出再畫出。
從你目前的邏輯看起來,你要跟資料庫撈資料的條件是從一個n到m的連續整數,所以只要傳n跟m給php,叫他把所有資料一次吐給你就好了。這樣用jsonp來處理也很方便。例如你可以這樣做:
php端(例如叫做test.php):
<pre class="c" name="code">
<?php
$n = mysql_real_escape_string($_GET['n']);
$m = mysql_real_escape_string($_GET['m']);
$link = mysql_connect("127.0.0.1", "帳號", "密碼") or die("糟糕!無法連上資料庫喔!" . mysql_error());
$sql="select * from m where Seq>=$n AND Seq<=$m";
mysql_select_db("DATABASE");
$result=mysql_query($sql,$link);
//mysql_db_query will be deprecated in php 5.3.0, so...don't use it
$Vgs = array();
while($data=mysql_fetch_array($result)) {
$Vgs[] = $data['V'];
}
if (count($Vgs)==0)
$Vgs[0] = 0;
header("Content-Type: text/javascript");
//change to "application/json-p" in the future...
echo 'updateData(['.implode(',', $Vgs).']);';
?>
javascript部分:
<pre class="c" name="code">
<?php
//定義$Seqg的數值
?>
<script type="text/javascript">
// we use an inline data source in the example, usually data would
// be fetched from a server
var data = [], totalPoints = 300, n=<?php echo $Seqg; ?>;
function getRandomData() {
if (data.length > 0)
data = data.slice(1);
// do a random walk
var m = n;
while ( data.length < totalPoints ) {
if ( data.length !== 0)
n++;
}
var scrpt = document.createElement('script');
scrpt.src = 'test.php?n='+m+'&m='+n;
document.getElementsByTagName('head')[0].appendChild(scrpt);
document.getElementsByTagName('head')[0].removeChild(scrpt);
scrpt = null;
//return res;
}
function updateData(ary) {
// zip the generated y values with the x values
var res = [], i=0;
for(i=0; i<ary.length; i++) {
data = data.concat(ary);
}
for (i=0; i < data.length; i++)
res.push([i, data[i]]);
//剩下Code為繪圖且定時更新的部分...
}
</script>
大致上是根據你的邏輯改的,但是我也可能猜錯你的邏輯就是了。另外,我沒實際跑過,有錯誤的話請多見諒。
script tag啦...沒有Javascript這種tag...剛送出就看到錯誤![]()
謝謝fillano前輩的分享 但針對第三點我有個疑問 在JS的部分若我是第二次去呼叫getRandomData函式時,下面這句Code會去取php部分最新的結果囉
<pre class="c" name="code">document.getElementsByTagName('head')[0].appendChild(scrpt);
另外因為我還是ITHome的新手 若有一些菜味的行為還請多包涵阿![]()
請參考PHP手冊:
http://php.net/manual/en/function.header.php
底下的Example #2 Caching directives。