使用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 相关文章推荐
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
JS文本框不能输入空格验证方法
Mar 19 Javascript
JavaScript限定复选框的选择个数示例代码
Aug 25 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
Aug 05 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
Apr 10 Javascript
解决Vue打包后访问图片/图标不显示的问题
Jul 25 Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
Python的pycurl包用法简介
2015/11/13 Python
python实现点对点聊天程序
2018/07/28 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
使用python实现滑动验证码功能
2019/08/05 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
校园学雷锋活动月总结
2014/03/09 职场文书
十周年庆典策划方案
2014/06/03 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
运动会通讯稿100字
2015/07/20 职场文书
新郎新娘致辞
2015/07/31 职场文书
接收函
2019/04/22 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python
python模板入门教程之flask Jinja
2022/04/11 Python