使用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 showModalDialog,open取得父窗口的方法
Mar 10 Javascript
用JQuery调用Session的实现代码
Oct 29 Javascript
juqery 学习之四 筛选查找
Nov 30 Javascript
JavaScript prototype属性深入介绍
Nov 27 Javascript
Javascript数组循环遍历之forEach详解
Nov 07 Javascript
详解vue-cli 接口代理配置
Dec 13 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
Sep 04 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
js模拟类继承小例子
2010/07/17 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
详解javascript void(0)
2020/07/13 Javascript
Element InputNumber计数器的使用方法
2020/07/27 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
Python实现登陆文件验证方法
2018/10/06 Python
Python partial函数原理及用法解析
2019/12/11 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
python中doctest库实例用法
2020/12/31 Python
爱的奉献演讲稿
2014/09/10 职场文书
教师党员自我评议不足范文
2014/10/19 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
详解MySQL 联合查询优化机制
2021/05/10 MySQL
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript