【AJAX】分类文章列表

AJAX跨域访问出现’没有权限’的错误

很多人在使用AJAX调用别人站点内容的时候,JS会提示”没有权限”错误,这是XMLHTTP组件的限制-安全起见禁止访问非同域的网站,下面一个例子来访问http://www.google.cn,

<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) {  
         return new XMLHttpRequest();  
     }  
}  
 
function getWebPage(url) {  
  var oBao=createobj();  
  var my_url=url  
  oBao.open(‘get’,my_url,false);   
  oBao.onreadystatechange=function(){  
       if(oBao.readyState==4){  
            if(oBao.status=<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) {  
         return new XMLHttpRequest();  
     }  
}  
 
function getWebPage(url) {  
  var oBao=createobj();  
  var my_url=url  
  oBao.open(‘get’,my_url,false);   
  oBao.onreadystatechange=function(){  
       if(oBao.readyState==4){  
            if(oBao.status==200){  
              var returnStr=oBao.responseText;  
              document.write(returnStr);  
            }else{  
              document.write(“未找到您输入的地址或服务器505错误!”);  
            }  
       }  
  }  
  oBao.send(null);   
}  
getWebPage(‘http://www.google.cn’);  
</script> 
=200){  
              var returnStr=oBao.responseText;  
              document.write(returnStr);  
            }else{  
              document.write(“未找到您输入的地址或服务器505错误!”);  
            }  
       }  
  }  
  oBao.send(null);   
}  
getWebPage(‘http://www.google.cn’);  
</script> 

保存这段代码到test.html,在本地直接用IE打开没问题,但将该段代码上传到服务器后,问题出现了–JS提示”没有权限”错误!!!这该如何解决呢?
下面思考一下:既然不能访问非同域的,只能访问同域的地址了,同域的动态文件怎么获取非同域网页内容呢?我们还是想到的AJAX,只不过这个AJAX是在服务器端执行.
大体思路是这样的:首先将URL用AJAX提交给自己站内的文件,例如getPage.asp—在getPage.asp再次通过服务器XMLHTTP来访问提交来的URL—将获取的内容返回给提交URL的页—-显示内容
下面开始组织代码,首先是test.html文件

<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) { [...]

日期:2010年01月26日 | 分类:AJAX

AJAX跨域访问出现'没有权限'的错误

很多人在使用AJAX调用别人站点内容的时候,JS会提示”没有权限”错误,这是XMLHTTP组件的限制-安全起见禁止访问非同域的网站,下面一个例子来访问http://www.google.cn,

<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) {  
         return new XMLHttpRequest();  
     }  
}  
 
function getWebPage(url) {  
  var oBao=createobj();  
  var my_url=url  
  oBao.open(‘get’,my_url,false);   
  oBao.onreadystatechange=function(){  
       if(oBao.readyState==4){  
            if(oBao.status=<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) {  
         return new XMLHttpRequest();  
     }  
}  
 
function getWebPage(url) {  
  var oBao=createobj();  
  var my_url=url  
  oBao.open(‘get’,my_url,false);   
  oBao.onreadystatechange=function(){  
       if(oBao.readyState==4){  
            if(oBao.status==200){  
              var returnStr=oBao.responseText;  
              document.write(returnStr);  
            }else{  
              document.write(“未找到您输入的地址或服务器505错误!”);  
            }  
       }  
  }  
  oBao.send(null);   
}  
getWebPage(‘http://www.google.cn’);  
</script> 
=200){  
              var returnStr=oBao.responseText;  
              document.write(returnStr);  
            }else{  
              document.write(“未找到您输入的地址或服务器505错误!”);  
            }  
       }  
  }  
  oBao.send(null);   
}  
getWebPage(‘http://www.google.cn’);  
</script> 

保存这段代码到test.html,在本地直接用IE打开没问题,但将该段代码上传到服务器后,问题出现了–JS提示”没有权限”错误!!!这该如何解决呢?
下面思考一下:既然不能访问非同域的,只能访问同域的地址了,同域的动态文件怎么获取非同域网页内容呢?我们还是想到的AJAX,只不过这个AJAX是在服务器端执行.
大体思路是这样的:首先将URL用AJAX提交给自己站内的文件,例如getPage.asp—在getPage.asp再次通过服务器XMLHTTP来访问提交来的URL—将获取的内容返回给提交URL的页—-显示内容
下面开始组织代码,首先是test.html文件

<script type=”text/javascript”> 
function createobj() {  
if (window.ActiveXObject) {  
         return new ActiveXObject(“Microsoft.XMLHTTP”);  
     }  
     else if (window.XMLHttpRequest) { [...]

日期:2010年01月26日 | 分类:AJAX

Ajax介绍及其入门基础

Ajax原理:
   这个其实要从C/S和B/S的原理说起。Windows操作系统的诞生,为单机通信提供了很大的支持,程序设计也从DOS早期的单任务单用户向网络的分布式应用过度。C/S提供的客户/服务器编程模式为网络应用提供了一个有效的通信手段。浏览器与Web服务器之间的请求/ 服务,就是一个典型的C/S应用。
    有人说,怎么是C/S?这应该是B/S呀!其实是这样理解的:浏览器/Web服务器作为我们实现网页发布的一个平台,对于我们在这个平台上开发的应用,我们的应用是由浏览器从Web服务器上下载下来然后展示在浏览器的“容器”里的,我们的应用是B/S模式的。但是浏览器与Web服务器的通信,却是C/S模式的。可以说,B/S模式是建立在C/S模式之上的。
    Windows早期的桌面应用程序(包括单机程序和C/S结构的网络应用程序),其界面是调用Windows的API来实现的,后来,出现了VB、Delph(VCL)、VC++(MFC)等应用程序框架,把繁杂的API包装起来,使Windows程序开发难度大大降低、效率大大提高。
    进入B/S编程阶段后,我们只需要面向Web服务器和浏览器编程,不需要考虑网络通信和并发等复杂的问题。但是在浏览器和Web服务器之间,为了进行数据交互,浏览器经常频繁的向Web服务器提交一些信息,现在的网络环境又极差,使我们经常等待于浏览器与Web服务器的通信状态,用户体验很差。而传统的桌面程序没有这个缺陷。
    怎样既能利用B/S程序极强的界面表现力,又能避免其提交后的那一段眩晕的“真空”状态呢?
    其实,在浏览器的设计阶段,设计师已经为我们考虑到了这个问题。这就是我们要说到的Ajax!Ajax英文是Asynchronous JavaScript and XML,就是在浏览器里通过一个机制,实现浏览器端与Web服务器端的一个异步通信,参与这个过程的有javascript、XML等技术。Ajax的引入,使B/S信息传递的量减少了,浏览器界面不再闪烁了,浏览者的感觉好多了。
    Ajax并不是一项新技术,而是几个现有技术的新组合,而且它的发展也得益于几家大的互联网企业的率先应用(大家常拿Google的在线Maps来举例)。连浏览器寡头微软当初都没怎么看得起这项技术,后来才在VS.NET2.0时代玩命的赶呀追。
Ajax的实现:
    Ajax是由浏览器通过内部的一个组件实现的,这个组件负责接收用户的请求,以XML作为信息中介,并与Web服务器实现异步通信,并把请求的结果返回给浏览器,再由浏览器呈现给用户界面。“异步”的意思就是组件在后台工作期间,浏览器与用户保持在交互状态,并不更新当前窗口。也不是所有的数据都被组件提交到后台去。
    Ajax实现的基础是:浏览器有一个Ajax引擎;浏览器支持Javascript;Web服务器端也支持XML数据格式。并不是所有浏览器都支持Ajax技术的,但支持Ajax的浏览器越来越多。
    这个组件在Windows下是一个COM组件,由IE浏览器调用。IE浏览器也是在5.0版本以后才提供这个组件的。不同的浏览器实现和创建XMLHttpRequest对象的方式是不太一样的。但作为一个通用的Ajax接口,其外在表现是一致的。
    Ajax其实是一项复杂的技术,牵扯到的东西很多。除过XMLHttpRequest对象和Javascript,还有DOM(文档对象模型),XML等。Javascript是一个粘合剂,它通过XMLHttpRequest对象对浏览器端页面的诸多元素进行操控,实现与Web服务器的后台交互,实现数据验证、存取等功能。
Ajax编程示例:
1,客户端(文件client.htm)
    <html>
    <head>
    <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
    <title>AJAX 客户端</title>
    <script language=”javascript”>
     var xmlhttp = false;
     ////开始初始化XMLHttpRequest对象
      //这段代码考虑到了xmlhttp对象与目前主流浏览器的兼容
      //如果在IE浏览器下测试,一条
      //xmlhttp = new ActiveXObject(“Msxml2.XMLHTTP”)
      //或xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”)语句就可以了
     if(window.XMLHttpRequest)
     {
      //Mozilla 浏览器
      xmlhttp = new XMLHttpRequest();
      if (xmlhttp.overrideMimeType)
      {//设置MiME类别
       xmlhttp.overrideMimeType(‘text/xml’);
      }
     }
     [...]

日期:2010年01月25日 | 分类:AJAX

赞助商链接

广而告之

友情链接

关于站点 - 联系我们 - 网站大事 - 友情链接 - 免责声明 - 意见反馈 - 网站投稿 - 站点地图
版权所有开心编程网禁止转载! Copyright © 2009-2010 All Rights Reserved. Email:hbhgfzk@126.com