研究ext发现ajax跨域实现

上一篇 / 下一篇  2007-11-16 16:35:26

查看( 1186 ) / 评论( 5 )
之前一直没有深入研究过ajax跨域实现的问题,最近研究ext发现他的例子里可以请求远程的页面,它的方法叫scrīptTag。其实就是使用动态载入js脚本的方式来实现的。
转一个文章过来,具体就不写了,ext是通过传一个callbak方法动服务器页面,在返回结果中加上执行 callbak方法,总得来说服务器代码还要自己可以控制,如果完全想读别人的数据还是做不到。
作者:zhanglp888
用json和scrīpt标签,解决ajax的跨域问题
ajax的XMLHttpRequest因为js的安全问题是不能跨域的
但是<scrīpt></scrīpt>可以用src=”http://otherSite.com/a.js”可以跨域
所以动态写入一个<scrīpt></scrīpt>就OK了
scr指向一个其它站点的文件,比如:a.php?id=15
让a.php echo() 一个json的字符串
json 参考:http://www.json.org
下面为动态加载scrīpt标签的js

Javascrīpt代码
  1. <scrīpt>   

  2. var element = document.createElement(“scrīpt”);   

  3. function createscrīpt(compId,dataId){           
  4.         element.src = “http://othersite.com/json.php?comp_id=” + compId + “&data_id=” + dataId + “”;   
  5.         element.type = “text/javascrīpt”;   
  6.         element.language = “javascrīpt”;   
  7. }   

  8. function writeContent(){   
  9.         alert(productJSON.product[0].name);   
  10. }   

  11. window.onload = function(){   
  12.         createscrīpt(1,2);   
  13.         document.getElementsByTagName(“head”)[0].appendChild(element);   
  14. }   

  15. if(document.all){   
  16.         element.onreadystatechange = function(){//IE用

  17. var state = element.readyState;   

  18. if (state == “loaded” || state == “interactive” || state == “complete”) {   
  19.                         writeContent();   
  20.                 }   
  21.         };   

  22. } else {   
  23.         element.onload = function() {//FF用
  24.                 writeContent();   
  25.         };   
  26. }   


  27. </scrīpt>   
下面是json.php   echo出来的内容
var productJSON = {’product’: [
{’name’ : ‘物件名1′},
{’building’ : ‘建物名1′},
{’address’ : ‘5′}
]
};


http://www.coderhome.net/zifa/?p=139

TAG:

39号天堂桥 muqiao 发布于2007-11-16 19:26:13
你这个只适合IE
xlez的个人空间 xlez 发布于2007-11-16 22:12:30
被标题吸引进来才发现是
<script></script>可以用src=”http://otherSite.com/a.js”可以跨域
hmly的个人空间 hmly 发布于2007-11-17 09:26:10
呵呵!!
programmerhuang的个人空间 programmerhuang 发布于2007-11-18 17:32:02
嗯, 以前用过这种方法, 只能在IE
志凡的个人空间 dzjzmj 发布于2007-11-18 21:34:59
element.onload = function() {//FF用  这个不是吗
我来说两句

(可选)

Open Toolbar