[英]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請求在某些情況下只能是跨域的。 以下是一些技巧和解決方法的摘要。
如果源具有可用的JSONP,則可以繞過跨域限制。 http://www.sitepoint.com/jsonp-examples/
不太可能,但如果源具有源策略,則可以執行跨域請求。 看到你收到錯誤,我懷疑來源有這個政策。 如果我記得,所有瀏覽器都不支持這個...
如果我記得,有一些iFrame方法(我稱之為黑客)來傳輸數據。 最好不是最佳的。
如果所有其他方法都失敗了,您可以使用PHP緩存JSON文件並將其存儲在服務器上。 它不再是跨域的。
如果您試圖從公共API中提取它,那么它們很可能具有JSONP可用性。 如果他們不這樣做,他們很可能不希望你每次都提取數據(他們不想占用帶寬費用),而是希望你根據需要用PHP緩存它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.