2011-08-11 170 views
5

我有一個問題,從random.org使用jQuery請求一個隨機數。當我使用靜態頁面和下面的JavaScript時,我沒有任何問題獲得隨機數字。但是,我在Heroku上託管了一個Sinatra應用程序(另外,在使用Thin生產本地應用程序時),我得到「(網站)不被Access-Control-Allow-Origin允許」。jquery和random.org「不允許訪問控制允許來源」

function raffler(){ 

var rowCount = $('#winnerTable tr').length; 

$('#winnerButton').click(function() { 
    $.get("http://www.random.org/integers/?", {num: "1", min: "1", max: rowCount, col: "1", base: "10", format: "plain", rnd: "new"}, function(randNum) { 
     var myNumber = randNum; 
     $("#entry-" + randNum).addClass('winner'); 
    }); 
}); 

}; 

想法?

+0

Ajax請求受同源策略限制。除非您的頁面託管在域名「www.random.org」上,否則您不應該能夠發出該Ajax請求... –

回答

1

老實說,我不明白你怎麼能以任何方式做到這一點。因爲你不應該這樣做。 Access-Control-Allow-Origin是一種阻止跨域請求並且是大多數客戶端腳本引擎(例如Flash)的一部分的XSS保護。使用下面的隨機數字生成:

Math.random() 
+0

我也不確定;我無法弄清楚它爲什麼在它工作時起作用,爲什麼它不起作用。我想盡可能使用隨機數生成(random.org),但我只需要解決Math.random()。 =]感謝您的幫助。 – YuKagi

+0

但是,如果您在桌面上設置了.html文件,並使用我在上面發佈的代碼鏈接到.js文件,那麼它將起作用。 ;) – YuKagi

+0

看到Boldewyn的回答,他解釋了爲什麼它在本地工作 – SinistraD

3

好了,就進行快速檢查,random.org不返回任何CORS頭。這就解釋了爲什麼你不能通過你的網站通過Javascript請求它。

您是否在本地加載了靜態文件,它在哪裏工作,即通過file:///協議?還有其他安全措施值班,瀏覽器通常允許跨域AJAX。

相關問題