`
sp42
  • 浏览: 147335 次
  • 来自: Canton
文章分类
社区版块
存档分类
最新评论

EXT手册:Manual:Core:Working with JSON (Chinese)

阅读更多
有一段JavaScript如下:

var obj = {
	prop1: "a0~`!@#$%^&*()-_+={}[]|\\:;\"',.?/",
	prop2: ['x','y'],
	prop3: {
		nestedProp1: 'abc', 
		nestedProp2: 456
	}
}


本文将会讨论如何把一个对象转换为JSON并将其发送到服务器。
編輯 使用Ext.urlEncode进行URL编码

首先我们看看Ext.urlEncode 这个方法(相对应的是Ext.urlDecode解码方法)。 Ext.urlEncode()不能用来处理JSON,Ext.urlEncode()只是负责在HTTP进行GET、POST请求时,将某个“普通的” 对象转换成名称/值(name/value)的状态。我这里说“普通”的意思是urlEncode只是将第一层属性编码,———数组自然没有问题但内嵌的对象就不行了。 举例:
Ext.urlEncode(obj) == "prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&prop2=x&prop2=y"

    * 注意属性3被忽略了
    * 注意特殊字符都被编码了(使用JS自身的encodeURIComponent())

如果你只是想纯粹地发送一些的请求,可把参数写成JavaScript原生对象的形式,然后用这个方法编码urlEncode发送,———这是较方便的做法。

例如,你可以在一个GET请求的URL后面加上一段文本字符:

    * 请求是这样的:

http://myurl.com?prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&prop2=x&prop2=y

    * 服务器会透过URIComponent解码成为:

prop1	a0~`!@#$%^&*()-_+={}[]|\:;"',.?/
prop2	x
prop2	y


你也可以同POST请求发送这样的内容:

    * 请求是这样的:
http://myurl.com


    * POST内容:

prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&prop2=x&prop2=y

    * 服务器得到的结果是和GET请求的内容无异的。

这一切还顺利,但说到要发送和接受JSON,该怎么办呢?接下来再看!
編輯 使用Ext.encode编码JSON

Ext.encode() (其对应的解码方法为Ext.decode)转换一个复制的对象为一段JSON字符举例:

Ext.encode(obj) == '{"prop1":"a0~`!@#$%^&*()-_+={}[]|\\:;\"\',.?/","prop2":["x","y"],"prop3":{"nestedProp1":"abc","nestedProp2":456}}'

    * 注意内嵌对象的属性现在被包含进去了

刚才是我们转换一个简单的对象到名称/值(name/value)的状态,现在的情况将有所不同,此时的对象已经被转换到(序列化)一段参数。具体的作用是,以名称/值(name/value)的形式,发送到服务器解析。如果只是发送一个JSON字符串,可认为这个就是json参数。

要将JSON转换成为可GET/POST适合发送的名称/值(name/value)状态,你可以额外地将其编码:
encodeURIComponent(Ext.encode(obj)) == "%7B%22prop1%22%3A%22a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%5C%3A%3B%5C%22'%2C.%3F%2F%22%2C%22prop2%22%3A%5B%22x%22%2C%22y%22%5D%2C%22prop3%22%3A%7B%22nestedProp1%22%3A%22abc%22%2C%22nestedProp2%22%3A456%7D%7D"

创建一个GET的请求如下:
"http://url.com?json=" + encodeURIComponent(Ext.encode(obj))

或是POST请求也行:

"json=" + encodeURIComponent(Ext.encode(obj))


urlEncode()方法也是可以:
Ext.urlEncode({ json: Ext.encode(obj)}) == "json=%7B%22prop1%22%3A%22a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%5C%3A%3B%5C%22'%2C.%3F%2F%22%2C%22prop2%22%3A%5B%22x%22%2C%22y%22%5D%2C%22prop3%22%3A%7B%22nestedProp1%22%3A%22abc%22%2C%22nestedProp2%22%3A456%7D%7D"

这样便可以通过GET/POST发送。至于另一边的服务端,会透过URIComponent解码这段参数:

{"prop1":"a0~`!@#$%^&*()-_+={}[]|\\:;\"',.?/","prop2":["x","y"],"prop3":{"nestedProp1":"abc","nestedProp2":456}}

来访问JSON已解码的数据。
編輯 使用Ext.Ajax.request发送JSON

在EXT 1.1,你可以轻松地使用Ext.Ajax.request()方法来创建一个典型AJAX的请求。该方法允许传入一个配置项的对象,即是可包含其它类型的内容,作为请求的参数的用途,下面引用API的介绍:

(原文)params {Object/String/Function} (Optional) An object containing properties which are used as parameters to the request, a url encoded string or a function to call to get either.

(中文)params {Object/String/Function} (可选项) 包含请求参数的对象,以对象的属性形式出现,一段可url编码的字符串,或者是可返回以上两者的函数。

对于传入的是object类型, Ext.Ajax.request会调用Ext.urlEncode()将其转换为名称/值(name/value)的状态(通常情况忽略内嵌的对象)。

var req = Ext.Ajax.request({
    url: "/ws/search.pl",
    params: obj,
    method: 'GET',
    disableCaching: false
})


请求是这样的:

/ws/search.pl?prop1=a0~%60!%40%23%24%25%5E%26*()-_%2B%3D%7B%7D%5B%5D%7C%5C%3A%3B%22'%2C.%3F%2F&prop2=x&prop2=y

服务端解析为:

prop1	a0~`!@#$%^&*()-_+={}[]|\:;"',.?/
prop2	x
prop2	y


    * 如不禁止disableCaching,Ext会加上唯一的_dc参数以消除缓冲。
    * 每次送出的数据都是经过Ext.urlEncode(),很明显是没有发送完整的JSON,只是一连串的名称/值(name/value)的状态。

如果使用POST的方法,过程也是相同,区别是名称/值(name/value)的状态是放在POST BOBY内发送。

要把JSON发送到服务器,我们需要使用Ext.encode()方法转换数据对象到文本格式的JSON。 Ext.Ajax.request()允许传入一段可URL编码的字符串,所以你既可以用 encodeURIComponent()编码参数,亦可直接是一个简单的对象,让Ext.Ajax.request()为你编码:

var req = Ext.Ajax.request({
    url: "/ws/search.pl",
    params: {json: Ext.encode(obj)},
    disableCaching: false
})


相类似地,服务端会解析为:

{"prop1":"a0~`!@#$%^&*()-_+={}[]|\\:;\"',.?/","prop2":["x","y"],"prop3":{"nestedProp1":"abc","nestedProp2":456}}


这样我们便可以访问JSON已解码的数据了。

出处:http://jstang.5d6d.com/thread-696-1-1.html
分享到:
评论
3 楼 beckrabbit 2007-10-18  
不错 收藏了
2 楼 sslaowan 2007-10-16  
在性能上JSON和XML、数组比有优势吗?
1 楼 鹤惊昆仑 2007-10-16  
我调用EXT.encode()方法时报递归层次太深的错误。。
prototype.js的toJSON和json.js(json.org/js)都有这个问题

相关推荐

    AnyFo - Util - Json4Ext:通用ExtJS数据交换处理

    AnyFo - Util - Json4Ext Json4Ext项目背景 在大家开发的系统中,如果程序用ExtJS做表现层,那么就需要使ExtJS开发的界面和后台Java代码中生成的数据交互,一般来说,可以选 择XML格式和Json格式的数据进行交互...

    Spring3+Hibernate4+SpringMVC整合Ext:JSON数据格式传输

    2、ext4,这个项目是用来做ext的公共js库用的,这样不比没个项目都添加ext的js文件,方便开发。 切记将ext4项目部署上去,并且应用名称为ext4,否则访问fes项目是会找不到ext的js文件。 jxcia.sql是数据库脚本,...

    ext定制:搜索框

    根据提供的文件信息,我们可以深入探讨如何在Ext JS中定制搜索框(`Ext.app.SearchField`),并实现一个美观且功能强大的搜索组件。 ### 标题:Ext定制:搜索框 此标题简明扼要地表达了文章的核心内容——如何在...

    Ext手册中文pdf版本

    这个“Ext手册中文pdf版本”是开发者学习和理解Ext框架的重要参考资料。 Ext框架的核心特性包括: 1. **组件化**:Ext提供了一系列预定义的UI组件,如表格、树形视图、菜单、面板等,这些组件可以灵活组合,构建...

    Ext Ajax:如何调用Ext.Ajax.request方法和使用Java Servlet进行处理.doc

    Ext Ajax:如何调用Ext.Ajax.request方法和使用Java Servlet进行处理

    ext json struts 完整无错源码

    EXT JSON Struts 源码分析 EXT 是一个基于 JavaScript 的富客户端开发框架,它提供了丰富的组件库,用于创建互动性极强的 Web 应用。EXT 的设计目标是简化前端开发,提供易于使用的 API 和美观的用户界面。JSON...

    jsonext例子的应用

    JSONEXT例子的应用主要展示了在Java开发环境中如何利用各种技术栈处理JSON数据,这些技术包括但不限于JSON库、Spring框架、Hibernate持久层框架以及ExtJS前端框架。以下是对这些关键知识点的详细解释: 1. JSON...

    EXT JSON Sqlserver 分页 全部正常运行

    【EXT JSON Sqlserver 分页 全部正常运行】 在IT领域,这个标题涉及到的是一个使用EXT JS(一种基于JavaScript的富客户端框架)和JSON(JavaScript Object Notation)数据格式,结合SQL Server数据库实现分页功能的...

    chinese-roberta-wwm-ext.rar

    《哈工大版Chinese RoBERTa-wwm-ext模型在PyTorch中的应用与解析》 RoBERTa(Robustly Optimized BERT Pretraining Approach)是BERT(Bidirectional Encoder Representations from Transformers)模型的一个重要...

    Ext Core Manual

    ### Ext Core Manual 知识点解析 #### 一、概述 **Ext Core**是一款轻量级且功能丰富的核心JavaScript库,采用MIT许可发布。该库旨在促进快速的Web开发,同时鼓励设计良好的可扩展代码。它包含了一系列令人兴奋的...

    ext json请求java后台返回集合数据

    标题中的“ext json请求java后台返回集合数据”指的是在Web开发中,前端EXTJS库通过JSON格式发送请求到Java后台,后台处理后返回一个集合(可能是列表或数组)的数据。EXTJS是一个用JavaScript编写的富客户端框架,...

    读Ext之十(解析JSON)

    在深入探讨“读Ext之十(解析JSON)”这一主题之前,我们首先需要理解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,设计简单且易于人阅读和编写,同时...

    EXT中文手册 中文API

    EXT中文手册 中文API 中文简明教程 Ext Core手册

    Ext3.0 中文帮助手册

    Ext3.0中文帮助手册是针对Ext JavaScript库的详尽指南,主要面向开发者,提供了关于Ext 3.0版本的API文档。这个手册是开发基于Web的富客户端应用的重要参考资料,因为Ext是一个强大的用户界面框架,它允许创建复杂的...

    json-ext:一组扩展JSON使用的实用程序。 专为快速且高效存储而设计

    json-ext 一组扩展JSON使用的实用程序。 专为快速且高效存储而设计 特征: parseChunked() –解析块(例如FS可读流或获取响应流)附带的JSON stringifyStream() –字符串化流(Node.js) stringifyInfo() –在不...

    chinese-bert-wwm-ext.rar

    《哈工大版Chinese-BERT-wwm-ext for PyTorch深度解析》 在自然语言处理(NLP)领域,预训练模型已经成为基石,而BERT(Bidirectional Encoder Representations from Transformers)模型更是其中的明星。本文将深入...

    ext学习手册(中英文版)

    5. **AJAX和JSON**:EXT内置了AJAX支持,方便与服务器进行异步通信,通常配合JSON数据格式进行数据交换,提高了性能和效率。 6. **可扩展性**:EXT提供了强大的插件机制和事件系统,使得开发者可以方便地扩展组件...

    Ext.tree.TreeLoader附带封装的json类

    在本文中,我们将深入探讨`Ext.tree.TreeLoader`与JSON数据在Ext JS框架中的应用。`Ext.tree.TreeLoader`是Ext JS库中的一个组件,它负责加载和解析树形结构的数据,而JSON(JavaScript Object Notation)则是一种轻...

Global site tag (gtag.js) - Google Analytics