0

可能重复:
规避同源策略的方法

我正在制作一个个人网页,用于提取彩票强力球号码并显示它们。除了这个链接之外,我在所有方面都取得了成功:

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:指令。如果我因为来自不同的域而受到限制,为什么会这样?

4

4 回答 4

0

跨域 ajax 的替代方案是:

  1. 编写代理,它将使用 CURL 请求远程服务器
  2. 从 ajax 调用中调用该代理文件
于 2012-09-30T12:17:30.657 回答
0

您不能使用 XHR读取来自不同来源的数据。由于请求是作为浏览器的用户发出的,因此它完成了所有可能对用户进行身份验证的操作,因此可能会检索机密信息(然后您可以使用 XHR 将其复制到您自己的服务器)。

有关解决方法,请参阅此 stackoverflow 问题

于 2012-09-30T10:18:31.760 回答
0

我不确定它是如何工作的,也不确定它的能力,但你似乎在上面有一个关于它为什么不起作用的答案。我建议您改用 ajax,它很简单,而且效果很好。

这是我使用它的示例:

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

祝你好运,

于 2012-09-30T10:23:32.240 回答
0

您的问题是相同的原产地政策。您将无法使用 AJAX 从该网站获取任何数据,除非该网站提供JSONP API(即便如此,它在技术上也不是 AJAX)。

您可以使用iframe在某种程度上实现您正在做的事情,但您必须包含整个页面,而不仅仅是它的相关部分。

如果您需要做的是Web 抓取,那么您将有一些服务器端代理来完成它。

一些可能对您有所帮助的工具:

于 2012-09-30T11:59:00.293 回答