为什么jquery .load()不从外部网站加载文本文件?

时间:2010-04-29 03:55:36

标签: javascript jquery load

在下面的示例中,当我点击按钮时,它会显示“已执行加载”但未显示任何文字

我在根目录中有 clientaccesspolicy.xml ,并且能够从 silverlight 异步加载相同的文件。所以我认为我也应该可以从 AJAX 访问。

我需要更改哪些内容才能在#content元素中正确显示文件http://www.tanguay.info/knowsite/data.txt的文字?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript"
        src="http://www.google.com/jsapi"></script>
        <script type="text/javascript">
            google.load("jquery", "1.3.2");
            google.setOnLoadCallback(function() {
                $('#loadButton').click(loadDataFromExernalWebsite);
            });
            function loadDataFromExernalWebsite() {
                $('#content').load('http://www.tanguay.info/knowsite/data.txt', function() {
                    alert('Load was performed.');
                });
            }
        </script>
    </head>
<body>
    <p>Click the button to load content:</p>
    <p id="content"></p>
    <input id="loadButton" type="button" value="load content"/>
</body>
</html>

2 个答案:

答案 0 :(得分:4)

Clientaccesspolicy对javascript没有影响。大多数(可能全部?)现代浏览器将阻止您运行跨站点脚本,因为这是一种安全风险。

您的替代方法是通过您自己网站上的文件代理该网站,例如/proxy.php?loadurl=http://theothersite.com,然后通过Javascript调用该文件,因为它来自您的域名,因此会被允许。

答案 1 :(得分:1)

我认为任何浏览器都不会为XMLHttpRequest服从clientaccesspolicy.xmlcrossdomain.xml

您可以查看其他机制,例如Cross-Origin Resource Sharing。这是Firefox 3.5及更高版本的supported