2012-09-30 41 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调用