簡體   English   中英

交叉原始請求被阻止

[英]Cross origin request blocked

我想從其他網站檢索json數據,所以我嘗試做一個簡單的跨域請求。 我在Wamp上運行了這個index.php文件:

<!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" manifest="manifest.appcache">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MySite</title>
<script type="text/javascript">
    function getXDomainRequest() {
        var xdr = null;

        if (window.XDomainRequest) {
            xdr = new XDomainRequest();
        } else if (window.XMLHttpRequest) {
            xdr = new XMLHttpRequest({mozSystem: true});
        } else {
            alert("Your browser does not support AJAX");
        }

        return xdr;
    }
    function sendData() {
        var xdr = getXDomainRequest();
        xdr.onload = function() {
            alert(xdr.responseText);
        }

        xdr.open("GET", "http://example.com");
        xdr.send();
    }
</script>
</head>
<body>
<p>
        <input type="button" onclick="sendData();" value="Retrieve" />
</p>
</body>
</html>

但是我收到一條錯誤消息,表示交叉來源請求已被阻止。 我是js的新手,這是我第一次嘗試在js中使用Web API,所以我可能在這里完全錯過了一些東西......

非常感謝。

Javascript請求在某些情況下只能是跨域的。 以下是一些技巧和解決方法的摘要。

  1. 如果源具有可用的JSONP,則可以繞過跨域限制。 http://www.sitepoint.com/jsonp-examples/

  2. 不太可能,但如果源具有源策略,則可以執行跨域請求。 看到你收到錯誤,我懷疑來源有這個政策。 如果我記得,所有瀏覽器都不支持這個...

  3. 如果我記得,有一些iFrame方法(我稱之為黑客)來傳輸數據。 最好不是最佳的。

  4. 如果所有其他方法都失敗了,您可以使用PHP緩存JSON文件並將其存儲在服務器上。 它不再是跨域的。

更多細節可以在方法中找到, 以規避同源政策

如果您試圖從公共API中提取它,那么它們很可能具有JSONP可用性。 如果他們不這樣做,他們很可能不希望你每次都提取數據(他們不想占用帶寬費用),而是希望你根據需要用PHP緩存它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM