0

如果我只有另一个网页的链接(从该网页获取 html 内容),我如何将解析的 html 内容插入到我的网页中。我正在使用 ajax 调用,我收到了错误,我编写了下面的代码。浏览器不是我想要的问题,就像在 Facebook 但不是在 php

<script>
    jQuery.support.cors = true;

    $.ajax({
            type:"GET",
            url:"http://www.hotscripts.com/forums/javascript/3875-how-read-web-page-content-variable.html",
            dataType:"html",
            crossDomain:true,
                beforeSend: function(xhr) 
            {
                xhr.overrideMimeType('text/plain; charset=UTF-8');
            },
            success:function(data) {
                alert(data);
                $("body").html(data);
            },
            error:function(errorStatus,xhr) {
                alert("Error",errorStatus,xhr);
            }
        });

</script>
4

1 回答 1

0

可能是你的浏览器不支持cors。 http://caniuse.com/cors或其他域不发回 Access-Control-Allow-Origin 标头。感谢昆汀的评论。另一种选择是使用 jSONP。

<script>
var query = "http://query.yahooapis.com/v1/public/yql?q=" + 
             encodeURIComponent("SELECT * FROM html WHERE url = 'http://www.hotscripts.com/forums/javascript/3875-how-read-web-page-content-variable.html'") + 
             "&format=json";
$.ajax({
        type:"GET",
        url: query,
        crossDomain:true,
            beforeSend: function(xhr) 
        {
            xhr.overrideMimeType('text/plain; charset=UTF-8');
        },
        success:function(data) {
            alert(data);
        },
        error:function(errorStatus,xhr) {
            alert("Error",errorStatus,xhr);
        }
    });
</script>

第三种选择是通过位于您域中的代理脚本发出请求。

回复:“我使用了 jQuery.support.cors=true;仍然存在问题” 正如我所说的,服务器应该返回必要的标头。如果对方不允许它变成任何东西都无能为力。检查这个:

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

要发起跨域请求,浏览器会发送带有 Origin HTTP 标头的请求。此标头的值是为该页面提供服务的域。例如,假设来自http://www.example-social-network.com的页面尝试访问 online-personal-calendar.com 中的用户数据。如果用户的浏览器实现了 CORS,则以下请求标头将发​​送到 online-personal-calendar.com:

 Origin: http://www.example-social-network.com

如果 online-personal-calendar.com 允许该请求,它会在其响应中发送一个 Access-Control-Allow-Origin 标头。标头的值指示允许哪些源站点。例如,对上一个请求的响应将包含以下内容:

访问控制允许来源:http ://www.example-social-network.com

如果服务器不允许跨域请求,浏览器将向 example-social-network.com 页面发送错误,而不是 online-personal-calendar.com 响应。

为了允许来自所有域的访问,服务器可以发送以下响应标头:

 Access-Control-Allow-Origin: *

这通常是不合适的。唯一合适的情况是页面或 API 响应被视为完全公开的内容,并且旨在供所有人访问,包括任何站点上的任何代码。

“*”值的特殊之处在于它不允许请求提供凭据,即 HTTP 身份验证、客户端 SSL 证书,也不允许发送 cookie

于 2013-10-15T09:12:50.573 回答