2012-09-30 40 views
0

可能重複:
Ways to circumvent the same-origin policy的XMLHttpRequest不包含網頁,即使網頁被成功接收

我想提出一個個人網頁,提取彩票強力球號碼並顯示它們。我已經成功爲所有,但這一環節:

var xmlHttp = null; 
xmlHttp = new XMLHttpRequest(); 
xmlHttp.open("get", "http://www.powerball.com/powerball/pb_numbers.asp", false); 
xmlHttp.send(null); 

document.body.innerHTML = xmlHttp.responseText; 

我檢查了xmlHTTP.status,它是0。然而,使用Live HTTP頭應用程序,我看到請求被髮送和我得到一個成功的HTTP /1.0 200 OK在我的結尾收到網頁的地方。但是,在xmlHTTP對象中沒有收到任何東西。沒有responseText,只是狀態0沒有初始化。

編輯:我沒有看到返回標題中的Access-Control-Allow-Origin:指令。爲什麼這是因爲我來自不同的域名而受到限制?

回答

0

您不能使用XHR to read data from different origins。由於請求是以瀏覽器的用戶身份進行的,因此可以對所有可能對用戶進行身份驗證的應用程序進行檢索,以便檢索機密信息(然後可以使用XHR將其複製到自己的服務器)。

請參閱this stackoverflow question的變通辦法。

0

我不確定它是如何工作的,也不是它的能力,但你似乎有一個答案爲什麼它不起作用。我建議你使用ajax,它很簡單,而且工作得很好。

此處,我使用它的一個例子:

var site = $.ajax({ 
    url:  "http://google.com", 
    type:  "GET", 
    dataType: "html", 
    async:  false 
}).responseText; 
document.body.innerHTML = site; 

祝你好運,

+0

這不會因爲[SOP]的工作是代理文件請求遠程服務器(http://en.wikipedia.org/wiki/Same_origin_policy) - 見:http://api.jquery.com/jQuery.ajax/#notes-0 – rsp

0

你這裏的問題是same origin policy。您將無法使用AJAX從該網站獲取任何數據,除非該網站提供了一個JSONP API(即使這在技術上也不是AJAX)。

你可以在某種程度上用iframe來實現你正在做的事情,但是你將不得不包括整個頁面,而不僅僅包括整個頁面的相關部分。

如果你需要做的是Web scraping那麼你將有一些服務器端代理來做到這一點。

有些工具可以幫助你:

+0

我在返回頭文件中沒有「Access-Control-Allow-Origin:」。如果我受到限制,爲什麼它不在那裏? – dman

0

替代跨域名Ajax是:

  1. 寫代理其將使用curl
  2. 呼叫從Ajax調用