使用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 flash下fromCharCode和charCodeAt方法使用说明
Jan 12 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
Mar 17 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
jquery slibings选取同级其他元素的实现代码
Nov 15 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
Dec 01 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
js解决movebox移动问题
Mar 29 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 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
php开启安全模式后禁用的函数集合
2011/06/26 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
详解nodejs http请求相关总结
2019/03/31 NodeJs
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python装饰器语法糖
2019/01/02 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
大学生学习党课思想汇报
2014/01/03 职场文书
空乘英文求职信
2014/04/13 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
防暑降温通知书
2015/04/27 职场文书
山楂树之恋观后感
2015/06/11 职场文书
莫言获奖感言(全文)
2015/07/31 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python