使用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学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
javascript实现div的显示和隐藏的小例子
Jun 25 Javascript
js实现日期级联效果
Jan 23 Javascript
浅谈JavaScript字符集
May 22 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
bootstrap中模态框、模态框的属性实例详解
Feb 17 Javascript
JavaScript数组迭代方法
Mar 03 Javascript
JS实现的走迷宫小游戏完整实例
Jul 19 Javascript
微信小程序动态显示项目倒计时
Jun 20 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
Jun 11 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下载文件源代码(强制任意文件格式下载)
2014/05/09 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
2019/05/28 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
Javascript执行效率全面总结
2013/11/04 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
python opencv之SIFT算法示例
2018/02/24 Python
python pandas生成时间列表
2019/06/29 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
python unichr函数知识点总结
2020/12/16 Python
个人承诺书
2014/03/26 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
教师网络培训心得体会
2016/01/09 职场文书
2016年十一促销广告语
2016/01/28 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
python基础之类方法和静态方法
2021/10/24 Python
javascript对象3个属性特征
2021/11/17 Javascript