跨域获取json数据
前阵子做了一个前端动态加载json数据的应用,其中使用xmlhttprequest动态加载js,但是前提是我的前端必须和js数据之间不能跨域,这个局限就很大了,果然过不多久,就接到要求,这个前端需要整合到另一个服务器上面去,我顿时就傻眼了,因为我最不愿意看到的情况出现了,跨域问题,唉,新手总是怕遇见问题,遇见多了估计就成了高手了。
没办法就只能重写前端获取数据的js逻辑,这次不能使用xmlhttprequest,而是使用动态加载script的方式加载js脚本,之前也曾经试过这种方法,但是碰到了异步加载的问题就搁置了,这次我也想了一些办法解决了这些问题,现在说一说我的思路。
1、如何加载script?
我使用的还是原始的js创建元素的方法加载的:document.createElement("script");然后设置路径等属性;
2、什么时候才能使用动态加载的js文件中的变量?
由于script是异步加载的,所以在执行append方法后,并不能马上使用里面的脚本,必须要等到脚本完全加载完毕之后才能使用,script元素有onload(ff、chrom)、onreadystatechange(ie)、onerror(ie、chrome、ff)属性可以设置回调函数,在ff和chrom中,script加载成功后会执行onload设置的回调函数,而在ie中如果script的加载状态发生变化后就会执行onreadystatechange回调函数,在函数中根据状态码判断加载状态,如果脚本加载失败的时候就会执行onerror的回调函数。
特别的,在ie中,如果你的脚本是已经加载过的,那么ie不会重新再次加载,这个特性在开始的时候可是让我大吃苦头,如果你的脚本是在之前加载过的话,那么在onreadystatechange回调函数中会有相应的状态码加以判断就是readystate=='complete',如果你要加载的脚本中的内容是动态变化的,同一个脚本文件每个一段时间其中的内容就会不一样,这个特性就会带来麻烦了,不过可以在你的脚本地址后面加上"?354354546",就是加上一个问号和一个随机数,这样就能保证在ie中不会应为你的脚本地址加载过就不会再次加载了。
评论2
- 1楼:YehAlice 发表于 2011-11-07 10:01 回复此评论1. 跨域获取json数据, 網路上有很多解決方法.
2. 為何加載script不用jQuery的getScript, 自己用xmlhttprequest要解決跨平台的問題.
3. jQuery的ajax可以設定cache=true, 不過我的習慣是後面加上版本序號 - 2楼:土匪强 发表于 2011-11-08 23:07 回复此评论
引用来自“YehAlice”的评论
1. 跨域获取json数据, 網路上有很多解決方法.
2. 為何加載script不用jQuery的getScript, 自己用xmlhttprequest要解決跨平台的問題.
3. jQuery的ajax可以設定cache=true, 不過我的習慣是後面加上版本序號哈哈,谢谢你的指点啊,我会一一去学习的!
跨域获取json数据的更多相关文章
- 使用JSONP,jQuery的ajax跨域获取json数据
网上找了很多资料,写的不错,推荐下: 1.深入浅出JSONP--解决ajax跨域问题 (http://www.cnblogs.com/chopper/archive/2012/03/24/240394 ...
- [ 转 ]jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- jquery的ajax和getJson跨域获取json数据
目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...
- javascript跨域获取json数据
项目在开发过程中,用到了天气预报的功能,所以需要调用天气预报的api,一开始以为直接用ajax调用url就可以获取天气数据,结果涉及到了跨域的问题,这里做一个记录. 说到跨域,就得知道同源策略. 同源 ...
- 跨域获取json一些理解[腾讯电商数据的拉取方式]
如何跨域获取json数据源?我们都知道要有callback,具体callback是如何工作的呢?如果服务器端不接收callback,我们是不是就没有办法处理了呢?读完本文后相信你会有一个大体的了解. ...
- AJAX跨域请求json数据的实现方法
这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...
- Jquery 跨域请求JSON数据问题
制作网站时,我们有时候为了方便快捷会调用别人写好的API接口,或者是调用一些免费的API接口获得JSON数据.比如天气,农历,网站备案信息查询等. 但是,这些API接口都是别人自己服务器上的,我们要调 ...
- 关于跨域读取json数据我的理解
这两天在做关于读取json数据的插件,想用getJSON读取数据: $.getJSON(http://www.xxxx.com/Titles.js, function (data) { console ...
- ASP.NET 跨域获取JSON天气数据
前几天做一个门户网站,在首页需要加载气象数据,采用了中央气象局的接口. 刚开始采用JSONP在前台跨域请求数据,没成功~ 后换成在c#后台请求数据返回... 前端代码: $(function () { ...
随机推荐
- 1022 D进制的A+B
输入两个非负 10 进制整数 A 和 B (≤2^30−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- MyEclipse持续性开发教程:用JPA和Spring管理数据(四)
MyEclipse红运年货节 在线购买低至69折!火爆开抢>> [MyEclipse最新版下载] 本教程介绍了MyEclipse中的一些基于JPA / Spring的功能.有关设置JPA项 ...
- VS2003在win7 64位的调试
win7 64位下安装了VS2003 ,在调试时,一直加载不了W3P.解决方案是.打开VS时,右键已管理员身份打开,即可调试.
- echarts折线图个性化填充、线条、拐点样式
由于每组数据的拐点样式.线条颜色都不一样,所以series里的每组数据都需要单独设置样式. 首先先来看一下完成后的效果吧 具体设置如下 series: [ { name:systemName[0], ...
- HAWQ + MADlib 玩转数据挖掘之(七)——关联规则方法之Apriori算法
一.关联规则简介 关联规则挖掘的目标是发现数据项集之间的关联关系,是数据挖据中一个重要的课题.关联规则最初是针对购物篮分析(Market Basket Analysis)问题提出的.假设超市经理想更多 ...
- Android实现EditText的富文本编辑
前言 本文是我之前写的这篇文章<Android图文混排-实现EditText图文混合插入上传>的升级版,除了在EditText实现了图片上传之外,还包含了视频上传.云盘文件上传.录音上传以 ...
- OO面向对象 课程总结
测试与正确性论证的效果差差异 测试和正确性论证都是对程序进行可靠性的验证. 测试: IEEE提出了对软件测试的定义:使用人工或者自动的手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求 ...
- C语言基础:结构体 分类: iOS学习 c语言基础 2015-06-10 21:47 28人阅读 评论(0) 收藏
结构体:是一种用户自定义的数据类型 结构体定义 struct 结构体名 { 成员类型1 成员变量名1; 成员类型2 成员变量名2; -. }; typedef 原类型 ...
- SIM800C SIM卡唯一标识符ICCID
/******************************************************************************* * SIM800C SIM卡唯一标识符 ...