感谢阅读。我正在尝试提出一个Javascript函数,它将外部URL页面的HTML源转换为变量,这样整个事情就变得可编辑了。复杂的是,URL不以“html,htm,aspx”扩展名结尾,而是以一串输入形式变量结束(即?type = AAA& color = BBB ...)。因此,XMLHttpRequest方法是不可能的。
这在JS / jQuery中是否可行?我听说过相同的原始政策,但是下面的工具设法做到这一点,尽管在PHP中:http://www.iwebtool.com/code_viewer
答案 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>