2012-05-29 30 views
0

我目前使用下面的方法使用JavaScript加載JavaScript的SRC

<script src="http://www.domain.com/function.php?param=A" type="text/javascript"></script> 

而且在function.php文件中的代碼將在Javascript格式的數據返回到調用一些變量的外部php文件外部PHP文件,像

<?php Header("content-type: application/x-javascript"); 
$p = $_GET['param']; 

$r = mt_rand(0, 10); 
echo "document.write('" . $p . $r . "');"; 
?> 

這只是一個簡單的例子。我的問題是谷歌瀏覽器(第19版),如果頁面沒有完成加載,隨機數字不會是隨機的,當我不斷刷新。只有在頁面完成加載後點擊刷新按鈕,它纔會變成真正的隨機。爲什麼會發生這種情況,我該如何解決?

我在Firefox 12和IE8上進行了測試,即使在完成加載之前刷新頁面,隨機數也會一直重新生成。

+0

有沒有原因你不使用Javascript的'Math.random()'? – dda

+0

對不起,也許我這裏的例子太簡單了。我實際上是在PHP文件中加載MySQL數據庫,加載一些數據並隨機選擇其中的一個傳回到調用它的頁面。 – huiqing

+0

嘗試在響應中添加一些無緩存標頭。 – DCoder

回答

0

您需要一個小JS砍。基本上,你想動態地添加JS中的<script>標籤,並在URL的末尾添加一個隨機參數。

var hookScripts = function(url, src) { 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = url || null; 
    s.innerHTML = src || null; 
    document.getElementsByTagName("head")[0].appendChild(s); 
}; 

hookScripts('http://www.domain.com/function.php?param=A&randomSalt=' + Math.random()); 

這將強制chrome再次請求JS文件。

+0

謝謝!隨機鹽的方法解決了我的問題! 無論如何,我將php代碼合併到Javascript src中以生成隨機鹽(因爲我需要在網頁的多個部分插入該代碼段的JavaScript代碼)。 – huiqing

1

您的URL的查詢字符串爲param=A,您在PHP/JS文件中引用$_GET['param1']。難道不是$_GET['param']

你可能要添加的頭,使您的js文件不被緩存

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

http://php.net/manual/en/function.header.php

+0

對不起,我的打字錯誤。 但這不是問題。 – huiqing

+0

謝謝。我添加了標題,但問題仍然存在。只有在谷歌瀏覽器... – huiqing