hi 各位大哥们,
   小弟初学网络编程很多问题都不明白,最近用javascript写了一个XMLHttpRequest代码,但是有问题,先放代码吧:
          var XMLHttp;
  XMLHttp=new XMLHttpRequest();
  function send(){   
    XMLHttp.onreadystatechange=doHttpReadyStateChange;
    XMLHttp.open("GET","http://www.baidu.com",true);
     XMLHttp.send();
  }
  
  function doHttpReadyStateChange(){
if(XMLHttp.readyState==4){
alert(XMLHttp.responseText);
}
  } 
  send();       我想问各位大哥,为什么我的代码alert()效果是什么文字都没有,按照XMLHttp.responseText说的,我应该得到百度首页的文字吧,请问是我什么地方弄错了?因为我看书上是链接的本地文件可以返回文字,我链接百度服务器不能返回吗??是不是我有什么概念弄错了?    我若使用XMLHttp.responseXML返回确实"null",真的不明白为什么,请各位大哥帮帮忙,谢谢

解决方案 »

  1. function __createXMLHttpRequest()
    {
        var xhr = null;
        var msProgs = ["Microsoft.XMLHTTP", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP"];
        for (var i = 0, l = msProgs.length; i < l; i++)
        {
            try
            {
                xhr = new ActiveXObject(msProgs[i]);
                break;
            }
            catch (e){}
        }
        if (!xhr)
        {
            try
            {
               xhr = new XMLHttpRequest();
            }
            catch (e){}
        }
        if (!xhr)
        {
            return null; // null
        }
        return xhr; // XMLHttpRequest
    }
      

  2. 给你个参考代码,我写的,测试通过。
    var xmlHttp;
    function sendHTTP()
    {
    if(window.ActiveXObject) //IE浏览器时
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    if(window.XMLHttpRequest) //其他浏览器时
    xmlHttp=new XMLHttpRequest();
    xmlHttp.onreadystatechange=getHTTP; //事件名不能写成onReadyStateChange,否则在火狐下不正常。
    xmlHttp.open("get","http://www.baidu.com",true);
    xmlHttp.send(null);
    }
    function getHTTP()
    {
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
    //document.getElementById("myText").innerHTML=xmlHttp.responseText;
    alert(xmlHttp.responseText);
    }
      

  3. 楼上的在FF下好象还是不行,IE6通过!
      

  4. firefox对安全的控制比较严,所以在firefox下跨域访问是不行的。
      


  5. 假设你的页面是http://www.example.org/index.html
    那么这个页面“属于域www.example.org”你在这个页面里面写了一段JS,用xhr访问“http://www.baidu.com/”
    被请求的页面“属于域www.baidu.com”,
    与你自己的页面不属同一个域,于是就是“跨域请求”了。由于不同的域通常是由不同的机构控制,
    跨域发送请求可能导致把一个域上的用户个人数据传给另一个域,
    另一个域则可能滥用这些数据。(当然还有其它类型的安全问题)因此浏览器通常都禁止代码跨域发送请求,这个时候
    responseText当然得不到请求的内容了。
      

  6. 如果你也写服务器端代码的话,可以自己搭一个服务器端跨域代理,
    具体视你使用的技术而定,PHP J2EE .NET的代码网上都很容易找到。
      

  7. 跨域 
    你只创建了ff request  没有ie request 你只能在  ff 上 用ie 不行
    ff 不能跨域
      

  8. 兄弟,我还是有点不明白,
        跨域不能访问,但是比如我若访问百度,我的域和百度域不是一个吧,为什么我能用到它的js了??我这个地方始终不明白,我不知道我的表述是否正确。意思是:不是同一个域不能访问,但是为什么客户能访问到那么多网站和他的js程序了???这不是跨域吗?
       谢谢
      

  9. 你的代码中光写XMLHttp=new XMLHttpRequest();
    这句是不够的。XMLHttpRequest对象在ie和其他浏览器中创建的方法是不同的:ie中是通过ActiveX控件的途径创建的,而其他浏览器大多本身内置了这个对象,即用XMLHttp=new XMLHttpRequest()创建。也就是说XMLHttp=new XMLHttpRequest()在ie中无效,没有创建XMLHttpRequest对象,所以返回是空的。关于“跨域不能访问”,意思是www.baidu.com同你的程序运行时客户端所在的ip地址不同,这种情况下浏览器限制了javascript的一部分功能(不是所有功能)。
      


  10. 通过XMLHttpRequest有跨域限制,
    但通过<script>引用外部的JS,被认为和引用图片、CSS类似,浏览器没有作限制,
    因为通常认为这些是正常的资源调用。
    (实际上这开了一个后门,
    你在网上搜索JSONP就可发现<script>标签是可以利用来跨域传送数据的一种途径)
      

  11. 这里有篇基于ajax原理做的多选控件
    里面也封装了相应的方法,你可以研究下
    基于Ajax原理的多选控件:
    http://www.yideal.com/index.php?option=com_content&view=article&id=70:ajax-multiple-select&catid=36:script-instance-articles&Itemid=62
      

  12. 参考:http://www.web666.net/xmlhttp/xmlhttprequest.html
      

  13. 哥们你是想用js实现ajax效果吗?费足了劲了,用jquery多方便啊,我的博客上写了一篇文章是asp.net ajax实例 你可以参考参考!
      

  14. 楼上的别乱发广告. 用jquery玩跨域也同样不容易.
      

  15. 降低你浏览器的安全性,以便可以跨域访问跨域访问的意思是地址栏的域与你ajax的域不一样,为防止钓鱼网站使用跨域访问进行钓鱼,一般会浏览器禁了该功能.
      

类似问题 »