首页 > 关于ajax获取数据的一个问题

关于ajax获取数据的一个问题

var xml=new XMLHttpRequest();
xml.open('GET','http://www.baidu.com/',false);
xml.send(null);
if(xml.status==200||xml.status==304){
    alert(xml.responseText);
}else{
    alert('no success');
}

这是我照书上写的一个例子,为什么不能请求到百度的网页数据呢?


先上代码:

var xhr = new XMLHttpRequest();                          
xhr.onreadystatechange = function(){                     
    if (xhr.readyState == 4){                            
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){      
            alert(xhr.responseText);                     
        }else{                                           
            alert("request was unsuccessful: " + xhr.status);                   
        }                                                
    }                                                    
};                                                       
xhr.open('get', "http://another_domain/corstest/", true);  // 跨域请求使用绝对url
// xhr.open('get', "/", true);  // 站内请求最好使用相对url
xhr.send(null);

首页ajax 对于跨域请求(CORS)是浏览器兼容性的, 在低版本IE中可能需要使用 XDomainRequest, 其他浏览器(Firefox 3.5+, Safari 4+, Chrome)的XMLHttpRequest 原生就支持CORS。
CORS 需要目标服务器的返回的响应头中包含Access-Control-Allow-Origin, 如果该header 允许你访问其资源,浏览器才会将响应数据交给javascript处理。

楼主可能对基本ajax 还不了解,建议认真看看。 推荐一篇文章 Ajax : Getting Started


不是随便一个网页就可以的,如果你要获取一个网页的数据,可以使用爬虫~
ajax请求的url是需要跟后端开发一起协商好的,后端返回什么数据,以及在请求时需要传什么参数,这些都要知道才可以的哟~


尽信书不如无书,书上讲的东西也许仅仅在某些特定环境下对的,当然你说它全错也有失点公允。你这里请求的地址是百度的域名,很明显如果这段代码不放到百度的网站,就是跨域请求,而ajax默认是不允许跨域请求的。
如果你掌握了ajax调试的方法,这个问题应该会很容易发现,看控制台,肯定会报出网络请求错误。


通常情况下Ajax是无法跨域的,这是为安全考虑的。只要协议、域名、端口有任何一个不同,都被当作是不同的域。
例如 http://127.0.0.1/上的Ajax请求只能请求http://127.0.0.1/下的其他地址,不能请求http://www.baidu.com/

【热门文章】
【热门文章】