原文地址:http://my.oschina.net/LinBandit/blog/34570
 

前阵子做了一个前端动态加载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数据的更多相关文章

  1. 使用JSONP,jQuery的ajax跨域获取json数据

    网上找了很多资料,写的不错,推荐下: 1.深入浅出JSONP--解决ajax跨域问题 (http://www.cnblogs.com/chopper/archive/2012/03/24/240394 ...

  2. [ 转 ]jquery的ajax和getJson跨域获取json数据

    目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...

  3. jquery的ajax和getJson跨域获取json数据

    目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端 ...

  4. javascript跨域获取json数据

    项目在开发过程中,用到了天气预报的功能,所以需要调用天气预报的api,一开始以为直接用ajax调用url就可以获取天气数据,结果涉及到了跨域的问题,这里做一个记录. 说到跨域,就得知道同源策略. 同源 ...

  5. 跨域获取json一些理解[腾讯电商数据的拉取方式]

    如何跨域获取json数据源?我们都知道要有callback,具体callback是如何工作的呢?如果服务器端不接收callback,我们是不是就没有办法处理了呢?读完本文后相信你会有一个大体的了解. ...

  6. AJAX跨域请求json数据的实现方法

    这篇文章介绍了AJAX跨域请求json数据的实现方法,有需要的朋友可以参考一下 我们都知道,AJAX的一大限制是不允许跨域请求. 不过通过使用JSONP来实现.JSONP是一种通过脚本标记注入的方式, ...

  7. Jquery 跨域请求JSON数据问题

    制作网站时,我们有时候为了方便快捷会调用别人写好的API接口,或者是调用一些免费的API接口获得JSON数据.比如天气,农历,网站备案信息查询等. 但是,这些API接口都是别人自己服务器上的,我们要调 ...

  8. 关于跨域读取json数据我的理解

    这两天在做关于读取json数据的插件,想用getJSON读取数据: $.getJSON(http://www.xxxx.com/Titles.js, function (data) { console ...

  9. ASP.NET 跨域获取JSON天气数据

    前几天做一个门户网站,在首页需要加载气象数据,采用了中央气象局的接口. 刚开始采用JSONP在前台跨域请求数据,没成功~ 后换成在c#后台请求数据返回... 前端代码: $(function () { ...

随机推荐

  1. 玩转X-CTR100 l STM32F4 l HC-SR04超声波测距

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 超声波测距模块HC-SR04可以测量2cm~40 ...

  2. 打开WORD文档出错提示

    打开WORD文档出错提示: Microsoft Office Word 遇到问题需要关闭.我们对此引起的不便表示抱歉. 您正在处理的信息有可能丢失.Microsoft Office Word 可以尝试 ...

  3. 【转】DelphiXE10.2.3——跨平台生成验证码图片

    原文地址 Java.PHP.C#等很容易在网上找到生成验证码图片的代码,Delphi却寥寥无几,昨天花了一整天时间,做了个跨平台的验证码,可以用在C/S和B/S端,支持Windows.Linux.An ...

  4. linux shell终端打开方式

    前言 Linux操作系统没有Window操作系统界面友好,使用者需要使用命令与系统进行交互,交互媒介为shell终端. 有三种方式可以打开终端: 方法一: 打开新的窗口并打开shell终端,快捷键:c ...

  5. C#Delegate.Invoke、Delegate.BeginInvoke And Control.Invoke、Control.BeginInvoke

    作者:EasonLeung 一.Delegate的Invoke.BeginInvoke 1.Delegate.Invoke (委托同步调用) a.委托的Invoke方法,在当前线程中执行委托. b.委 ...

  6. Visual Studio Code 使用指南

       安装 VSCode是微软推出的一款轻量编辑器,采取了和VS相同的UI界面,搭配合适的插件可以优化前端开发的体验. HTML Snippets:增强了zen-coding,增加了H5的自动补全,安 ...

  7. 状压dp终极篇(状态转移的思想)

    状压dp是将每种状态都压缩成用一个二进制串,然后利用位运算进行操作的dp,而凡是dp都需要进行状态转移 对于简单的dp问题只需要一个二维数组dp[ i ][ j ]就能解决 具体操作为首先把状态压缩为 ...

  8. hdu 1203 dp(关于概率的```背包?)

    题意:一个人手里有一笔钱 n ,有 m 所大学,分别知道这些大学的投简历花费和被录取概率,因为钱数有限,只能投一部分学校,问被录取的概率最大有多大. 这题除去计算概率以外就是一个 0 1 背包问题,所 ...

  9. MySQL Disk--NAND Flash原理

    ====================================================== NAND Flash最小存储单元: 写数据操作: 通过对控制闸(Control Gate) ...

  10. 【柚子木字幕組】【BBC】 Are Our Kids Tough Enough? Chinese School 英國的孩子足夠堅強嗎?中式教學

    https://www.youtube.com/watch?v=ypT6c4NZ6jk 最近很火的一个bbc纪录片 讲的是英国学校请几个中国老师到他们那里试行中国教育的故事 作为学习英文的素材很不错