如何使用客户端JavaScript从外部服务器获取Ajax请求
我试图在我的博客系统中写一个实用程序作为帖子。限制是我无法运行任何服务器端代码。我只能运行客户端(JavaScript)代码。我想向外部域发送请求并解析结果。如何使用客户端JavaScript从外部服务器获取Ajax请求
例如,基于人们如何使用我的工具,我会希望能够得到一个页面,如http://example.com/getPage.html?page=A的HTML,其中可能包含:
<html>
...
<body>
...
<table id="targetTable">
<tr><td>Some Data</td></tr>
<tr><td>Some Data</td></tr>
<tr><td>Some Data</td></tr>
</table>
...我将存储在一个JavaScript字符串中,然后查询以找到我想要的数据。
我想使用客户端代码仅从外部域(即我的脚本未在http://example.com上运行,我也不隶属于http://example.com)查询此页面。
我正在使用jQuery和it says,因为same origin policyjQuery.get()
方法不会工作。有什么办法做我想要的其他方式?例如,加载一个iframe然后以某种方式读取其html属性?
恐怕这是不可能的。你可以使用一个名为jsonp的约定来解决它,但是它只能检索json对象(即使那些对象当然可以包含html字符串)。但是一个服务器只能响应一个jsonp请求,如果它有内置的支持。
对于您的问题最直接的解决方法是创建一个小的服务器,获取html页面并返回json数据。然后你可以把你的ajax调用发送到该服务器(如:http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA),让它从example.com获取数据并将其作为json返回给客户端脚本。
只是为了加强我的论点,一块从jQuery的AJAX页面引用:
由于浏览器的安全限制, 大多数“Ajax”的请求受到 同源策略;请求 无法成功检索来自不同域,子域或 协议的数据 。
脚本和JSONP请求 不受同一来源 政策的限制。
您可以从另一个域加载iframe
或调用POST
调用另一个域。
幸运的是我们的安全性,但不幸的是您的问题,由于相同的原产地政策,你不能阅读任何Javascript。
如果您无法从其他域获得任何合作。例如:启用JSONP或window.postMessage
,那么您唯一的解决方案是使用Web服务器作为代理。
提供您的页面或免费(如果您的流量不是很大)的服务器,例如Google App Engine,您可以在其中进行操作。
您可以使用通用服务在ajax,JSONP或iframe + window.postMessage
中调用此服务器,该服务将获取页面内容并将其传递给浏览器。