如何使用客户端JavaScript从外部服务器获取Ajax请求

时间:2010-12-08 09:57:38

标签: javascript security

我正在尝试在我的博客系统中编写一个实用程序作为帖子。限制是我无法运行任何服务器端代码。我只能运行客户端(JavaScript)代码。我想向外部域发送请求并解析该结果。

例如,根据人们如何使用我的实用程序,我希望能够获取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 jQuery.get()方法由于same origin policy而无效。有什么方法可以做我想要的其他方式吗?例如,加载iframe然后以某种方式读取其html属性?

3 个答案:

答案 0 :(得分:1)

您可能需要查看JSONP和更新的CORS。使用这些技术仍然不能保证只使用Javascript和服务器端代码就能做到你想要的......

答案 1 :(得分:0)

我担心这是不可能的。你可以使用一个名为jsonp的约定解决它,但是它只能检索json对象(即使那些当然可以包含h​​tml-strings)。但是,如果服务器内置了对它的支持,服务器只能响应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请求   不受同一来源的影响   政策限制。

答案 2 :(得分:0)

您可以从其他域加载iframe或对另一个域进行POST次调用。

幸运的是,为了我们的安全,但不幸的是,由于同源策略,您无法使用Javascript阅读任何内容。

如果您无法从其他域获得任何合作。例如:启用JSONP或window.postMessage,那么您唯一的解决方案是使用Web服务器作为代理。
提供您的网页的服务器或免费(如果您的流量不是很大)的实验室,例如Google App Engine,您可以随时使用。

您可以使用通用服务在ajax,JSONP或iframe + window.postMessage中调用此服务器,该服务将获取页面内容并将其提供给浏览器。