`

Ext.data专题五:常用proxy之MemoryProxy

阅读更多

MemoryProxy只能从JavaScript对象获得数据,可以直接把数组,或JSON和XML格式的数据交给它处理,如下面的代码所示。

var proxy = new Ext.data.MemoryProxy([
    ['id1','name1','descn1'],
    ['id2','name2','descn2']
]);

HttpProxy使用HTTP协议,通过Ajax去后台取数据,构造它时需要设置url:'xxx.jsp'参数。这里的url可以替换成任何一个合法的网址,这样HttpProxy才知道去哪里获取数据,如下面的代码所示。

var proxy = new Ext.data.HttpProxy({url:'xxx.jsp'});               

后台需要返回EXT所需要的JSON格式的数据,下面的内容就是后台使用JSP的一个范例,如下面的代码所示。

response.setContentType("application/x-json");

Writer out = response.getWriter();

out.print("[" +

        "['id1','name1','descn1']" +

        "['id2','name2','descn2']" +

    "]");               

请注意,这里的HttpProxy不支持跨域,它只能从同一域中获得数据。如果想跨域,请参考下面的ScriptTagProxy。

常用proxy之ScriptTagProxy

ScriptTagProxy的用法几乎和HttpProxy一样,如下面的代码所示。

 

var proxy = new Ext.data.ScriptTagProxy({url:'xxx.jsp'});               

 

从这里也看不出来它是如何支持跨域的,我们还需要在后台进行相应的处理,如下面的代码所示。

 

String cb = request.getParameter("callback");

response.setContentType("text/javascript");

Writer out = response.getWriter();

out.write(cb + "(");

out.print("[" +

        "['id1','name1','descn1']" +

        "['id2','name2','descn2']" +

    "]");

out.write(");");

 

其中的关键就在于从请求中获得的callback参数,这个参数叫做回调函数。ScriptTag- Proxy会在当前的HTML页面里添加一个<script type="text/javascript"src="xxx.jsp"> </script>标签,然后把后台返回的内容添加到这个标签中,这样就可以解决跨域访问数据的问题。为了让后台返回的内容可以在动态生成的标签中运行,EXT会生成一个名为callback的回调函数,并把回调函数的名称传递给后台,由后台生成callback(data)形式的响应内容,然后返回给前台自动运行。

虽然上述处理过程比较难理解,但是我们只需要了解ScriptTagProxy的用法就足够了。如果还想进一步了解ScriptTagProxy的运行过程,可以使用Firebug查看动态生成的HTML以及响应的JSON内容。

最后我们来分析一下EXT的API文档中提供的示例,这段后台代码会自动判断请求的类型,返回支持ScriptTagProxy或HttpProxy的数据,如代码清单10-2所示。

代码清单 在后台同时支持HttpProxy和ScriptTagProxy

boolean scriptTag = false;

String cb = request.getParameter("callback");

if (cb != null) {

    scriptTag = true;

    response.setContentType("text/javascript");

} else {

    response.setContentType("application/x-json");

}

Writer out = response.getWriter();

if (scriptTag) {

    out.write(cb + "(");

}

out.print(dataBlock.toJsonString());

if (scriptTag) {

    out.write(");");

}               

 

代码中通过判断请求中是否包含callback参数来决定返回何种数据类型。如果包含,就返回ScriptTagProxy需要的数据;否则,就当作HttpProxy处理。

分享到:
评论

相关推荐

    Ext.data.Store的基本用法

    proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, PersonRecord) }); store.load(); ``` 这里的代码演示了如何创建一个`Ext.data.Store`实例。其中`data`数组包含了两行数据,分别...

    EXT核心API详解.doc

    26. **Ext.data.MemoryProxy类**:内存数据代理,用于存储在内存中的数据。 27. **Ext.data.ScriptTagProxy类**:通过脚本标签加载远程数据的代理。 28. **Ext.data.DataReader类**:数据读取器,解析服务器返回的...

    EXT核心API详解

    29、Ext.data.MemoryProxy类 ……… 25 30、Ext.data.ScriptTagProxy类 ………… 25 31、Ext.data.DataReader类 ……………26 32、Ext.data.ArrayReader类 …………… 26 33、Ext.data.JsonReader类 …………… 26 ...

    extjs核心api详解.doc

    6. **Ext.data**:EXT的数据管理模块是其强大功能的关键。这部分讲解了数据连接(Connection/Ajax)、数据代理(DataProxy,如HttpProxy、MemoryProxy、ScriptTagProxy)、数据读取器(DataReader,如ArrayReader、...

    ext学习资料ext学习资料

    var store = new Ext.data.Store({proxy: new Ext.data.MemoryProxy(data), ...}); var grid = new Ext.grid.GridPanel({cm: cm, store: store, autoHeight: true, renderTo: document.body}); store.load(); ``...

    ExtJS入门教程(超级详细)

    29、Ext.data.MemoryProxy类 ……… 25 30、Ext.data.ScriptTagProxy类 ………… 25 31、Ext.data.DataReader类 ……………26 32、Ext.data.ArrayReader类 …………… 26 33、Ext.data.JsonReader类 …………… 26 ...

    老师整理的extjs学习笔记

    `Ext.data.DataProxy` 是 `Ext.data.Store` 的一部分,负责从数据源获取数据。常见的 `DataProxy` 类型包括: - **AjaxProxy**: 通过 AJAX 调用获取数据。 - **MemoryProxy**: 从内存中读取数据。 - **RestProxy**:...

    EXTJS___API详解

    **Ext.Ajax, DataProxy, HttpProxy, MemoryProxy, ScriptTagProxy 类**:这些类涉及EXTJS的数据层,处理不同类型的远程数据源。 26-28. **DataReader, ArrayReader, JsonReader, XmlReader 类**:数据读取器,用于...

    Extjs深入浅出pdf

    1. **Ext.data**:EXTJS 的数据模块是其核心组件之一,它提供了一种在客户端和服务器之间管理、存储和传输数据的方法。这部分包括了对数据模型、存储和连接的定义。 2. **Ext.data.Connection**:这是EXTJS 中用于...

    Ext深入浅出 数据传输

    10.5.1 MemoryProxy.........................239 10.5.2 HttpProxy..............................240 10.5.3 ScriptTagProxy..................240 10.6 常用Reader..............................................

    Ext2.0框架的grid使用

    proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, [ {name: 'id', mapping: 0}, {name: 'sex', mapping: 1}, // 映射其他字段... ]) }); ``` `load()`方法用于初始化数据...

    Extjs Grid 用法 pdf版

    proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, [ {name: 'id', mapping: 0}, {name: 'sex', mapping: 1}, {name: 'name', mapping: 2}, {name: 'descn', mapping: 3} ]) });...

    Ext2.0示例讲解

    proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, [ {name: 'id', mapping: 0}, {name: 'sex', mapping: 1}, {name: 'name', mapping: 2}, {name: 'descn', mapping: 3} ]) });...

    精通JS脚本之ExtJS框架.part1.rar

    13.5.2 Ext.data.MemoryProxy 13.5.3 Ext.data.HttpProxy 13.5.4 Ext.data.ScriptTagProxy 13.6 数据读取器 13.6.1 Ext.data.DataReader 13.6.2 Ext.data.ArrayReader 13.6.3 Ext.data.JsonReader 13.6.4 Ext...

    Ext2[1].0框架的Grid使用介绍

    proxy: new Ext.data.MemoryProxy(data), // 数据来源 reader: new Ext.data.ArrayReader({}, [ // 数据解析规则 { name: 'id', mapping: 0 }, { name: 'sex', mapping: 1 }, { name: 'name', mapping: 2 }, {...

    第三方控件Coolite使用教程

    proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, [ {name: 'id', mapping: 0}, {name: 'sex', mapping: 1}, {name: 'name', mapping: 2}, {name: 'descn', mapping: 3} ]) });...

Global site tag (gtag.js) - Google Analytics