即使成功收到网页,XMLHttpRequest也不包含网页

时间:2012-09-30 10:16:19

标签: javascript xmlhttprequest

  

可能重复:
  Ways to circumvent the same-origin policy

我正在创建一个个人网页,提取彩票强力球数字并显示它们。除了这一个链接之外,我已经取得了所有成功:

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 个答案:

答案 0 :(得分:0)

您无法使用XHR to read data from different origins。由于请求是作为浏览器的用户完成的,因此可以使用可能对用户进行身份验证的所有内容进行操作,因此可能会检索机密信息(然后您可以使用XHR将其复制到您自己的服务器上)。

有关解决方法的信息,请参阅this stackoverflow question

答案 1 :(得分:0)

我不确定它是如何工作的,也不是它的能力,但你似乎已经找到了为什么它不起作用的答案。我建议你使用ajax,它很简单,效果很好。

以下是我使用它的示例:

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

答案 2 :(得分:0)

这里的问题是same origin policy。您将无法使用AJAX从该网站获取任何数据,除非该网站提供JSONP API(即使那时它不是技术上的AJAX)。

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

如果您需要做的是Web scraping,那么您将拥有一些服务器端代理来执行此操作。

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

答案 3 :(得分:0)

跨域ajax的替代方案是:

  1. 编写将使用CURL
  2. 请求远程服务器的代理
  3. 从ajax调用
  4. 调用该代理文件