AJAX XMLHttpRequest状态为0

时间:2013-10-27 19:31:19

标签: ajax xmlhttprequest

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

2 个答案:

答案 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;