1

我正在尝试使用 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">&nbsp;</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"); 
    }
 }
 }  
4

2 回答 2

1

您不能让您的客户端(通过 JavaScript)访问第三方 DOM,除非第三方允许通过CORS进行此类访问。您的代码违反了 Same-origin Policy

对于紧急工作,您可以使用这个合法的 hack-[JSONP]。

或者,您可以从服务器上的“dbpedia.org/resource/Los_Angeles”获取数据并发送给客户端。

于 2013-10-29T18:54:00.560 回答
0

确保您在 JavaScript 中输入的 url 与执行脚本的位置完全相同。例如,如果您在 localhost 上运行服务器,但 url 为 127.0.0.1,您宁愿获得 status = 0 而不是请求的内容。

正如 Rajdeep 所写,您无法通过 XMLHttpRequest 从您的脚本访问其他域。

基本上:

“如果不提及安全性,任何关于基于浏览器的技术的讨论都是不完整的。XMLHttpRequest 对象受制于浏览器的安全“沙箱”。XMLHttpRequest 对象请求的任何资源都必须位于调用脚本所源自的同一域中。此安全限制可防止 XMLHttpRequest 对象请求最初提供脚本的域之外的资源。此安全限制的强度因浏览器而异(参见图 2-5)。Internet Explorer 会显示一条警报,指出存在潜在的安全风险,但允许用户选择是否继续请求。Firefox 只是停止请求并在 JavaScript 控制台中显示错误消息。

于 2014-04-24T21:08:10.340 回答