首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
XENON基于JSON变种_json_脚本之家,基于Jquery的文字滚动跑马灯插件_jquery_脚本之家
发布时间:2019-12-25 16:26
浏览次数:

但是在用JSON的过程中,我遇到了一个问题——这个问题想必是大家多少都遇到过,那就是:JSON没有定义日期和时间的传递方式。 尽管在今年3月的一次更新中,json2.js已经增加了对Date函数和ISO-8601式的日期/时间格式,但各种常用的开发工具中对日期的支持还是五花八门、千奇百怪的,完全没有统一。 而且,除了日期/时间以外,个别时候我们还需要一些类或者函数的支持,而这些都是不被JSON所支持的。 可能有的人看到这里要问了:既然JSON不支持,那为什么不去用别的数据描述/传输方式呢? 原因是JSON本身就是JavaScript的功能子集,任何稍懂JavaScript的人都可以轻松地利用JSON。 解析JSON最简单的办法是直接使用eval函数将其作为JavaScript代码来执行,而JSON常常被用在互联网上的不同应用之间传递,所以直接将收到的JSON内容传入eval函数是具有很大的风险的,因此在RFC文档中严格规定了JSON的格式,并且给出了检验其安全性的办法。 而这个检验办法就禁止了函数的运行。 总而言之,因为JSON在使用上“偶尔”会有些不方便,所以我就开始动脑筋扩展JSON了。 在参考了RFC-4627、json2.js以及一些常见的JavaScript语法着色器以后,我发现:虽然json2.js已经有了对日期/时间的支持,但它所采用的语法分析的模式,这就意味着如果不是对语法分析有一定的了解,是很难对它进行扩展的;即使我稍微研习过一些语法分析的知识,想要扩展它也并非很容易的事情,更别谈日后的维护了。 所以我决定用RFC-4627中建议的较为简单的正则表达式过滤法。 这个扩展的基本实现是这样的: 复制代码 代码如下: function Xenon(){} var protoXenon = Xenon.prototype; protoXenon.xeval = function{ var al = [], vl = [], ol = {}; function ${ // i = parseInt; // return ol[i] || ; return ol.propertyIsEnumerable ? ol[i] : ; } for if(this.propertyIsEnumerable && typeof this[n] == 'function') al.push; return eval('0,function{return ' + s + ';}').apply; }; protoXenon.safeXeval = function{ var T = this; return ,:{}[]0-9.-+Eaeflnr-u nrt]/.test( s.replace*"/g, '') .replace{ // return T.propertyIsEnumerable ? '' : $1 + '('; return T.propertyIsEnumerable || null) && this.xeval; }; 基本用法就是创建一个xenon对象,为其设置新的成员以启用扩展函数。 可以把扩展函数直接添加到xenon对象上,也可以在全局作用域中声明函数再在xenon对象上设置非函数类型的成员值。 例子: 复制代码 代码如下: var xenon = new Xenon(); xenon.Array = 0; xenon.$ = 0; xenon.date = function;}; var o = xenon.safeXeval,"created":$(1,date("Tue Jul 27 02:48:03 UTC+0800 2010")),"modified":$; print; print(o.modified == o.created); 注:这个例子并不能直接作为JScript.NET代码执行,若要在JScript.NET中使用则必须将字符串"unsafe"作为第二个参数传递给eval函数。 注2:function关键字前增加“0,”是为了兼容于IE所使用的JScript引擎——当前的非CLI版本JScript引擎在其eval的实现中并不能正确地理解包围着函数定义的圆括号的意义,会因此引发语法错误。 在这个例子中使用了三个函数扩展:Array为全局作用域中的JavaScript内置函数;$是我在XENON中实现的内置功能,可以在多处引用同一个对象;而date则是对Date构造器的包装。 在XENON的实现中我没有让它支持new操作符创建新对象,我没发现有要用new而不能直接用扩展函数的理由。 关于名字:起初打算叫做xJson,但是后来想想觉得有点逊,改作XEON(eXtensible ECMAScript Object Notation)之后又发现好像是Intel的注册商标,所以在中间多加了个N变成了XENON(eXtensible Native ECMAScript Object Notation)。查了下字典,是个化学元素的名字……就这么凑合用吧。 关于安全性:在设计检验方法的过程中我尽可能测试了我所想得到的字符组合,力求避免注入问题。但是由于缺乏实践检验,我也不擅长语法分析之类的事情,所以可能并不是绝对安全。如果谁发现了其中的安全漏洞,可以通知我来改进它。 以后有时间我会做一个简单的从ECMAScript对象向XENON转换的函数;如果真的有很充裕的时间,也许我还会实现包含类名和构造器的转换过程。

复制代码 代码如下:

腾讯的接口是 ,返回数组 http://fw.qq.com/ipaddress 返回值 var IPData = new Array("61.135.152.194","","北京市",""); 新浪的接口 : http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42 返回值 var remote_ip_info = {"ret":1,"start":"218.192.0.0","end":"218.192.7.255","country":"u4e2du56fd","province":"u5e7fu4e1c","city":"u5e7fu5dde","district":"","isp":"u6559u80b2u7f51","type":"u5b66u6821","desc":"u5e7fu5ddeu5927u5b66u7ebau7ec7u670du88c5u5b66u9662"}; 通过jquery 获取相应的数据 复制代码 代码如下: $.getScript{ //腾讯:IPData[0] //新浪:remote_ip_info.country ... })

兼容各浏览器的文本行高 复制代码 代码如下: { $.fn.extend({ RollTitle: function{ if var opt={}; var _this = this; _this.timer = null; _this.lineH = _this.find; _this.line=opt.line?parseInt:parseInt/_this.lineH,10); _this.speed=opt.speed?parseInt:3000, //卷动速度,数值越大,速度越慢(毫秒 _this.timespan=opt.timespan?parseInt:5000; //滚动的时间间隔 this.line=1; _this.upHeight=0-_this.line*_this.lineH; _this.scrollUp=function(){ _this.animate({ marginTop:_this.upHeight },_this.speed,function(){ for(i=1;i<=_this.line;i++){ _this.find.appendTo; } _this.css; } _this.hover{ clearInterval; },function(){ _this.timer=setInterval{_this.scrollUp; }).mouseout; 调用方法: line:一次卷动的文本行数 speed:卷动动画的时间 timespan:间隔时间 复制代码 代码如下:

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有