2012-12-12 44 views
0

我使用Math.random來生成一個隨機字符串在ajax調用中傳遞。問題是生成的字符串包含一個十進制數,服務器將其解釋爲file.ext(當然不存在)。Javascript數字小數點數字

防爆從http.log:

File does not exist: /path/to/site/foo.php&arg=123&randval=0.5678719817071954, referer: http://site/bar.php?arg=123 

阿賈克斯用來生成鏈接:

​​

我想用什麼落得是:

foo.php&arg=123&randval=05678719817071954 

的參數randval不是用於確保我沒有結束頁面的緩存版本。它可能不是必需的,但這是來自我用來設置jquery ajax調用的示例。

+0

錯誤:TypeError:Math.random()。replace不是一個函數(EDIT,以前的評論者刪除了這個建議) –

+1

只替換字符串而不是數字,使用toString()或者查看下面David的答案。 – adeneo

+0

@acoder:是的,我知道(我在發表評論後大約五秒鐘就想出了一個相當重要的「噢!」時刻......)。 –

回答

1

我建議,在地方Math.random(),使用:

(Math.random() + '').replace('.',''); 
+0

好吧這個工程 - 其他人建議使用日期而不是數學。是否有性能優勢? –

+0

@acoder no。 '+ new Date'唯一的缺點是如果你連續發出兩個請求,你可能會得到相同的值。 –

+0

不是真的(就我所見過的那樣),這是達到相同結果的另一種方法。值得注意的是'Math.random()'可以產生兩次相同的數字(畢竟,隨機數不會產生任何影響);而Date()。getTime()'不會返回兩次相同的時間(假設對getTime()方法的調用之間存在延遲)。 –

0

也許更容易,更常見的...如果你不需要使用的Math.random()

+ (new Date()).getTime(); 
+1

只是'+新的日期'得到你相同的價值。 –

0

爲什麼不使用new Date().getTime()並避免任何麻煩

+0

使用Date vs Math有什麼好處?否則它無關緊要。 –

1

Math.random()返回01之間的值,之間獲得數和max你需要乘以max。這應該這樣做:

Math.floor(Math.random() * 1e16) // 1e16 == 10000000000000000 
0

其他答案是正確的 - 但我忽略了一個明顯的type -o在我的代碼中。我在寫鏈接:

foo.php&arg=123 

應該

foo.php ARG = 123

enter code here 

一旦我更新,該文件未找到錯誤就解決了?

感謝您提出有關修正數學/小數問題的建議 - 現在不需要,但有用。