现在的位置: 首页 > 综合 > 正文

研究ext发现ajax跨域实现

2013年09月07日 ⁄ 综合 ⁄ 共 1521字 ⁄ 字号 评论关闭
之前一直没有深入研究过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.

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

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

  11. function writeContent(){  
  12.         alert(productJSON.product[0].name);  
  13. }  
  14.

  15. window.onload = function(){  
  16.         createscrīpt(1,2);  
  17.         document.getElementsByTagName(“head”)[0].appendChild(element);  
  18. }  
  19.

  20. if(document.all){  
  21.         element.onreadystatechange = function(){//IE用
  22.

      var state = element.readyState;  
  23.

      if (state == “loaded” || state == “interactive” || state == “complete”) {  
  24.                         writeContent();  
  25.                 }  
  26.         };  
  27.

  28. } else {  
  29.         element.onload = function() {//FF用
  30.                 writeContent();  
  31.         };  
  32. }  
  33.

  34.

  35. </scrīpt>  

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

抱歉!评论已关闭.