我正在尝试使用AJAX从http://dbpedia.org/resource/Los_Angeles网站获取数据。 但是,每次我获得状态为0.我在FireFox浏览器中尝试。如何使这项工作?
我的HTML页面如下:
<!DOCTYPE HTML>
<html>
<head>
<link type="text/css" rel="stylesheet" href="main.css">
</head>
<body>
<script type="text/javascript" src="dbpediaext.js"></script>
<div id="background">
<div id="divheader"><span id="header1">Welcome to DBpedia Gateway</span><br><br>
</div>
<br><br>
<div id="divform1">
<form>
<fieldset>
<span id="txt2">Please select a City:</span> <br>
<select id="city">
<option value="LosAngeles">Los Angeles</option>
<option value="NewYork">New York</option>
<option value="Mumbai">Mumbai</option>
</select>
<br><br>
<input id="searchbutton" type="submit" size="30" value="Submit">
</fieldset>
</form>
<div id="displayresult"> </div>
</div>
</div>
<br>
</body>
</html>
javascript代码如下:
window.onload=init;
var request = false;
function init(){
document.getElementById("searchbutton").onclick=search;
}
function search(){
makeRequest(this.form);
return false;
}
function makeRequest(data) {
var selectedCity = data.city.value;
alert(selectedCity);
var url = "http://dbpedia.org/resource/Los_Angeles";
if(window.XMLHttpRequest){
request = new XMLHttpRequest();
}
else {
if (window.ActiveXObject) {
try{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
if(request){
request.open("GET",url,true);
request.onreadystatechange = callBack;
request.setRequestHeader("Accept","application/json");
request.setRequestHeader("Method","GET"+url+"HTTP/1.1");
request.send();
}
else {
alert("Sorry could not create an XMLHttpRequest");
}
}
function callBack(){
alert("call back invoked");
if(request.readyState == 4){
alert("ready state is 4");
alert(request.status);
if(request.status == 200){
alert("Response received");
}
}
}
答案 0 :(得分:1)
您不能让您的客户端(通过JavaScript)访问第三方DOM,除非第三方允许通过CORS进行此类访问。您的代码违反了Same-origin Policy。
对于紧急工作,你可以使用这个合法的黑客 - [JSONP]。
或者您可以从服务器上的“dbpedia.org/resource/Los_Angeles”获取数据并发送给客户。
答案 1 :(得分:0)
确保您放入JavaScript的URL与执行脚本的位置完全相同。例如,如果您在localhost上运行服务器但将url设置为127.0.0.1,则表示状态= 0而不是请求的内容。
由Rajdeep撰写,您无法通过XMLHttpRequest从您的脚本访问其他域。
基本上:
&#34;如果不提及安全性,任何关于基于浏览器的技术的讨论都不会完整。 XMLHttpRequest对象受浏览器的安全性“沙箱”的影响。任何资源 XMLHttpRequest对象请求必须驻留在同一个域中 调用脚本起源。此安全限制阻止XMLHttpRequest对象 请求最初提供脚本的域外的资源。 此安全限制的强度因浏览器而异(参见图2-5)。互联网 资源管理器会显示一条警告,指出存在潜在的安全风险但会为用户提供选择 是否继续请求。 Firefox只是停止请求并显示错误 JavaScript控制台中的消息。&#34;