使用script的src实现跨域和类似ajax效果


Posted in Javascript onNovember 10, 2014

场景

假如有两个域名不同的服务器, a.com和b.com, 在b.com/b_return_js.php这个接口里, 可以获取一些数据。 当然,假如是b.com的页面里, 可以使用ajax, 直接请求这个接口, 但如果在a.com的页面里如果请求呢。

b_return_js.php的接口代码:

$a = array(

    array('username'=>'tony', 'age'=>25),

    array('username'=>'yimeng', 'age'=>23),

    array('username'=>'ermeng', 'age'=>22),

    array('username'=>'sanmeng', 'age'=>21),

);

shuffle($a);
echo 'var userdata = '.json_encode($a).';'; //一般如果是b.com的站内请求就直接返回json_encode($a)了, 但如果要用src属性实现跨域, 这里我们需要将该值赋给一个js变量, 保证在script标签加载后的页面里能获取到这个数据并使用。

简单实现

有一种简单的方法就是在a.com下的页面里, 直接

<script src="http://b.com/b_return_js.php"></script>

这样在a.com的页面里就能直接获取到这个接口里返回的数据了。
但这里有一个缺陷,这个数据只能在页面加载的时候获取到, 假如我们想要使用ajax那种可以随时获取新的接口数据的方式就不太适用了, 例如点击一个按钮, 从这个接口获取数据局部刷新, 这种方式就有一些不合适了。

类ajax实现

其实实现上面说的类ajax的思路就是在ajax条件触发的时候, 重新生成一遍上面的那个标签, 从而再次从接口获取数据, 但实际上实现起来还是略有难度(至少对我来说费了不少功夫)。

上代码:

假如a.com/scriptSrc.php页面下有一个按钮

<input type="button" id="ajax_request_from_b" value="来自B.com的请求"/>
每次点击都会从b.com/b_return_js.php接口获取数据, 类似ajax的实现代码:

function createScript()

{

    //console.log(ele);

    ele.src = 'http://b.com/b_return_js.php';

    ele.type = 'text/javascript';

    ele.language = 'javascript';

}
function getData()

{

    console.log(userdata);

}
$('#ajax_request_from_b').click(function(){
    //每次都需要重新加载这个script标签, 因此每次都要重新生成一个新的script标          签保证能从跨域服务器获取数据

    if(ele && ele.parentNode)

    {

        //ele.parentNode.removeChild(ele);  //这种删除不能将ele彻底从内存删除,只是移除了在dom中的位置

        for (var property in ele) {            

            delete ele[property];        //彻底删除

         } 

    }

    ele = document.createElement('script'); //这是一个新的ele

    createScript();

    document.getElementsByTagName("head")[0].appendChild(ele);

    ele.onload = function(){getData()};  //script元素加载后方可获取userdata, 每次获取的都是随机顺序的用户信息

});

这样你每次点击按钮, 都会重新从接口获取一遍数据, 效果就类似于ajax, 但这是一种js跨域的方法实现, 虽然有些吃力不讨好, 但不失为一种思路。

Javascript 相关文章推荐
javascript一点特殊用法
May 28 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 Javascript
javascript入门基础之私有变量
Feb 23 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
Jun 24 Javascript
Vue动态组件实例解析
Aug 20 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
Vue封装的可编辑表格插件方法
Aug 28 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 Javascript
Typescript类型系统FLOW静态检查基本规范
May 25 Javascript
jquery插件推荐 jquery.cookie
Nov 09 #Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 #Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 #Javascript
js闭包的用途详解
Nov 09 #Javascript
js闭包实例汇总
Nov 09 #Javascript
浅谈JS闭包中的循环绑定处理程序
Nov 09 #Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 #Javascript
You might like
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
php 购物车的例子
2009/05/04 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
PHP概率计算函数汇总
2015/09/13 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
基于jQuery的实现简单的分页控件
2010/10/10 Javascript
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
ES6中的Promise代码详解
2017/10/09 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
layui表格 列自动适应大小失效的解决方法
2019/09/06 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
vue 中this.$set 动态绑定数据的案例讲解
2021/01/29 Vue.js
python实现在pickling的时候压缩的方法
2014/09/25 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
2018/08/03 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
好的演讲稿开场白
2013/12/30 职场文书
企业节能减排实施方案
2014/03/19 职场文书
初中差生评语
2014/12/29 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS