获取没有XMLHttpRequest的URL的HTML

时间:2012-01-05 01:54:33

标签: javascript xmlhttprequest

感谢阅读。我正在尝试提出一个Javascript函数,它将外部URL页面的HTML源转换为变量,这样整个事情就变得可编辑了。复杂的是,URL不以“html,htm,aspx”扩展名结尾,而是以一串输入形式变量结束(即?type = AAA& color = BBB ...)。因此,XMLHttpRequest方法是不可能的。

这在JS / jQuery中是否可行?我听说过相同的原始政策,但是下面的工具设法做到这一点,尽管在PHP中:http://www.iwebtool.com/code_viewer

2 个答案:

答案 0 :(得分:0)

XMLHttpRequest适用于任何有效的网址,只需为其提供相应的网址,您就可以将响应作为文字获取。

然而,same-origin policy有限制。对于不同的情况,有不同的解决方法,但如果您希望能够操作您收到的文本,那么实际上只有一个选项。使用与您当前相同的javascript,只需将其添加为getUrl的第一行:

url='/path/to/proxy.php?url='+encodeURIComponent(url);

然后,在您的服务器上(与为该页面及其javascript提供服务的服务器相同),编写proxy.php:

<?php
  echo file_get_contents($_GET['url']);
?>

这将使您发出的每个ajax请求都转到您的服务器,该服务器没有仅从一个域加载的限制。服务器将加载您要求的URL,并使用从其加载的页面获得的响应回复您。请注意,上面的脚本只会为您提供内容正文(您在查看源代码时看到的内容) - 如果您需要访问HTTP标头,您也可以转发它们,它会更复杂。

答案 1 :(得分:0)

在这种情况下,相同的源策略确实适用,但是您可以使用服务器端代码(PHP)和jQuery的组合来实现。这是一个小例子。

<强> PHP

<?php
    $url = $_REQUEST['url'];
    $curl_handle=curl_init();
    curl_setopt($curl_handle,CURLOPT_URL,$url);
    curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
    $buffer = curl_exec($curl_handle);
    curl_close($curl_handle);
    echo($buffer);
?>

jQuery / HTML

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$.ajax({
  type: "POST",
  url: "yourPhpScript.php",
  data: "url=http://stackoverflow.com"
}).done(function( content ) {
  $('#content').html(content);
  //content is your variable containing the source
});
</script>

<div id="content"></div>