是什么阻止我使用 $.ajax 加载另一个域的 html?



我的域:

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'html',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

是什么阻止我刮取他们的域名?周围有工作吗?

附录:感谢大家提出的使用服务器端脚本的建议,但我目前有兴趣专门使用客户端来解决这个问题。

如果我使用"jsonp"格式化请求,我至少会得到一个响应,但会出现以下错误:"Uncaught SyntaxError:Unexpected token<"。所以我从他们的域中得到了一个响应,但解析器希望它是json。(也应该如此。)我正在仔细研究这一点,试图看看他们是否是欺骗客户接受这一回应的一种方式。请理解,我知道这是非典型的。

<!DOCTYPE html>  
<html>
<head>
<title>scrape</title>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
</head>
<body>
    <script>
        $.ajax({url:'http://their-domain.com/index.html',
        dataType:'jsonp',
            success:function(data){console.log(data);}
        });
    </script>
</body>
</html>

有四种方法可以绕过同源策略

  1. 代理-您从服务器请求,服务器从其他域请求,服务器将其返回到浏览器
  2. Flash跨域策略-其他域必须向其站点添加crossdomain.xml文件
  3. 跨域HTTP标头-其他域必须在其页面中添加Access-Control-Allow-Origin标头
  4. JSONP-它是一个json web服务,提供回调函数。其他域必须实现此功能

注意:在没有其他域帮助的情况下,唯一的方法是#1,通过您自己的服务器进行路由。

同源策略防止客户端脚本从非请求发起者的域获取数据。您需要一个服务器端脚本来充当代理

这是同源策略,用于防止跨域请求。如果你想抓取html,最好编写一个服务器端流程来获取内容,然后使用ajax向你的服务器发出请求,其中包含获取的数据。

一个解决方法是制作一个服务器端脚本(例如PHP)来获取页面,并让$.ajax调用它。

最新更新