`
bwong
  • 浏览: 7488 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

dojo.toJson不支持正则序列化的解决方法

    博客分类:
  • dojo
阅读更多
dojo把一个对象序列化成json时,如果对象中包含正则表达式,正则表达式会被转换为{},而不能转换为toString()形式,可以给dojo打个补丁,参看如下加粗代码:

/**
* dojo.toJson方法,增加正则表达式支持
*/
dojo.toJson = function(/*Object*/it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){
    if (it === undefined) {
        return "undefined";
    }
    var objtype = typeof it;
    if (objtype == "number" || objtype == "boolean") {
        return it + "";
    }
    if (it === null) {
        return "null";
    }
    if (it instanceof RegExp) {
        return it.toString();
    }
   
    if (dojo.isString(it)) {
        return dojo._escapeString(it);
    }
    var recurse = arguments.callee;
    var newObj;
    _indentStr = _indentStr || "";
    var nextIndent = prettyPrint ? _indentStr + dojo.toJsonIndentStr : "";
    var tf = it.__json__ || it.json;
    if (dojo.isFunction(tf)) {
        newObj = tf.call(it);
        if (it !== newObj) {
            return recurse(newObj, prettyPrint, nextIndent);
        }
    }
    if (it.nodeType && it.cloneNode) {
        throw new Error("Can't serialize DOM nodes");
    }
    var sep = prettyPrint ? " " : "";
    var newLine = prettyPrint ? "\n" : "";
    if (dojo.isArray(it)) {
        var res = dojo.map(it, function(obj){
            var val = recurse(obj, prettyPrint, nextIndent);
            if (typeof val != "string") {
                val = "undefined";
            }
            return newLine + nextIndent + val;
        });
        return "[" + res.join("," + sep) + newLine + _indentStr + "]";
    }
    if (objtype == "function") {
        return null;
    }
    var output = [], key;
    for (key in it) {
        var keyStr, val;
        if (typeof key == "number") {
            keyStr = '"' + key + '"';
        }
        else
            if (typeof key == "string") {
                keyStr = dojo._escapeString(key);
            }
            else {
                continue;
            }
        val = recurse(it[key], prettyPrint, nextIndent);
        if (typeof val != "string") {
            continue;
        }
        output.push(newLine + nextIndent + keyStr + ":" + sep + val);
    }
    return "{" + output.join("," + sep) + newLine + _indentStr + "}";
}
比如var a={reg:/a/}
dojo.toJson(a)会转换为"{reg:/a/}",而没改之前dojo会转换为"{reg:{}}"
欢迎光临我的独立博客http://bwong.me
1
1
分享到:
评论

相关推荐

    dojo.js 1.4.2

    dojo.js 1.4.2dojo.js 1.4.2dojo.js 1.4.2dojo.js 1.4.2dojo.js 1.4.2dojo.js 1.4.2dojo.js 1.4.2

    dojo.js.uncompressed.js 1.4.2

    dojo.js.uncompressed.js 1.4.2dojo.js.uncompressed.js 1.4.2dojo.js.uncompressed.js 1.4.2

    dojo.zip

    10. **dojo.wba**:这个文件的扩展名不常见,可能是一种特殊的打包格式,可能包含了dojo库的完整构建,或者是特定版本的dojo环境。通常,dojo库的文件会有.js后缀,因此,这个文件可能需要特定的工具或环境才能解压...

    DOJO.js 最优秀的js 框架 1.9.3

    **DOJO.js 框架详解** DOJO.js 是一个功能强大的JavaScript库,它被誉为“最优秀的js框架”之一,特别是在版本1.9.3中,这个称号得到了充分的体现。DOJO以其全面的特性、模块化的设计以及对各种浏览器的良好支持而...

    Pragmatic.Bookshelf.Mastering.Dojo.Jun.2008.pdf

    此外,dojo.store抽象层使得与各种数据源(如JSON、RSS、Atom等)的交互变得更加简单。 5. **动画与视觉效果**:Dojo包含了一个强大的动画引擎,可以创建复杂的CSS3动画和基于时间轴的过渡效果。dojox.fx提供了一套...

    dojo.xd.js

    dojo.xd.js 最新JavaScript框架组件!

    资源名称dojo.js

    dojo.js

    Dojo.GUI_v6.zip for pencil

    【Dojo.GUI_v6.zip for pencil】是一款专为Pencil设计的GUI模板资源包,它扩展了Pencil这款优秀的Web原型设计工具的功能和视觉元素。Pencil是一个免费且开源的应用程序,允许用户创建各种交互式原型,适用于网页、...

    dojo.js 1.92版

    dojo.js.uncompressed.js 1.92版

    Dojo.The.Definitive.Guide

    Dojo支持多语言和本地化,通过`dojo.i18n`模块,开发者可以轻松地为应用程序添加不同语言的支持。 9. **Dojo Build System** Dojo的构建系统允许开发者优化和打包代码,合并多个模块为单个文件,减少HTTP请求,...

    dojo学习...........

    - AJAX通信:Dojo的IO模块支持异步数据请求,如`dojo.io.*`,便于与服务器进行数据交互。 - UI组件:`dojo.widget.*`包含了多种可复用的UI组件,如按钮、表单元素等,方便快速构建用户界面。 - 动画效果:Dojo的动画...

    domino xapges 其中的dojo.xhrGet 和 dojo.xhrPost例子

    domino xapges 其中的dojo.xhrGet 和 dojo.xhrPost例子

    Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库

    dojo.js.核心jsDojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库Dojo.js核心dojo的javaScript类库

    Addison.Wesley.Dojo.Using.the.Dojo.JavaScript.Library.to.Build.Ajax.Applications.Jun.2008.pdf

    Dojo支持模块化开发,拥有强大的DOM操作、事件处理、AJAX调用、动画效果以及多种UI控件等功能。它还提供了一个强大的数据网格组件,可以轻松地处理大量数据,并具有高度可定制性。 ### 二、AJAX技术与Dojo的关系 ...

    dojo.js javasrcpt

    难得纯净资源,不用下载其他乱起八糟的东西了

    dojo-0.3.1-ajax

    虽然基本的xhr方法不支持文件上传,但Dojo提供了一个`dojo.form`模块,可以处理表单数据并实现文件上传。 7. **跨域请求** Dojo的AJAX功能支持跨域请求,通过设置`preventCache`、`withCredentials`等选项,可以...

    dojo_doc(json+dojo的例子)

    例如,它包含了一个名为`dojo.fromJson()`的函数,可以将JSON字符串转换为JavaScript对象,以及`dojo.toJson()`函数,可以将JavaScript对象转换为JSON字符串。这些工具使得在JavaScript和服务器之间交换JSON数据变得...

    dojo精品中文教程(全)

    Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习笔记--TabContainer Dojo...

    dojo精品中文教程(包一)

    Dojo学习笔记-- dojo.event & dojo.event.topic & dojo.event.browser Dojo学习笔记--DateTextbox Dojo学习笔记--Dojo的基础对象和方法 Dojo学习笔记--FisheyeList鱼眼效果 Dojo学习笔记--TabContainer Dojo...

    dojo中文文档-dojo手册

    dojo.fx模块提供了诸如fadeIn、fadeOut、slideTo等动画效果,同时,dojo.fx.combine和dojo.fx.chain可以将多个动画组合在一起,实现复杂的动画序列。 Dojo还提供了强大的事件处理机制。dojo.connect允许开发者订阅...

Global site tag (gtag.js) - Google Analytics