`
Jellen129
  • 浏览: 62220 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ExtJS常用proxy

阅读更多

10.5 常用proxy

1.  MemoryProxy

2.  HttpProxy

3.  ScriptTagProxy

 

10.5.1 MemoryProxy

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

var proxy = new Ext.data.MemoryProxy([

['id1','name1','descn1'],

['id2','name2','descn2']

]);

10.5.2 HttpProxy

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

 

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

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

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

代码清单10-2 在后台同时支持HttpProxyScriptTagProxy

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处理。

分享到:
评论

相关推荐

    免费 Extjs4.0教程视频

    - Ext类是Extjs中的基础类,提供了许多常用的功能。 - **深入解析**: - 详细介绍core包中的关键类和方法,以及如何使用Ext类进行开发。 #### 第十讲:Extjs 4.0的util包 - **util包**: - util包包含了各种实用...

    extjs教程word版本

    教程可能会对常用的类和方法进行详细解释,如Ext.application、Ext.Component、Ext.grid.Panel等。 5. **Ajax和RESTful通信**:由于Web应用通常需要与服务器交互,教程会讲解如何使用Ajax进行异步通信,以及如何...

    EXTJS4+STRUTS2+JAVA增删改查

    EXTJS4、STRUTS2和JAVA是Web开发中常用的三大技术框架,它们结合使用可以构建功能丰富的交互式用户界面和高效的企业级应用。在这个"EXTJS4+STRUTS2+JAVA增删改查"的例子中,我们将深入探讨这三个技术如何协同工作,...

    Extjs 与后台交互的实例

    4. **JSON数据交换**:在前后端交互中,JSON是一种常用的数据交换格式,因为它轻量且易于解析。ExtJS可以方便地将Model对象转换为JSON格式发送给服务器,同时Servlet也可以将处理结果转换为JSON返回给前端。JSON数据...

    ExtJS4 doc文档

    `GridPanel`是ExtJS4中最常用的组件之一,用于展示结构化的数据。它提供了丰富的功能,如分页、排序、过滤、编辑等。`Column`类定义了列的属性和行为,而`SelectionModel`控制用户选择行的方式。通过组合使用这些...

    Extjs4.0视频教程和源代码,另附文档翻译

    - **不同类型的Proxy**:详细介绍了几种常用的Proxy类型,如AjaxProxy、RestProxy等,以及它们的应用场景。 - **配置和使用Proxy**:通过实例演示了如何配置不同的Proxy类型,并在实际项目中使用它们。 ### 读写器...

    经验总结-Extjs(一)数据交互设计

    5. **RESTful API**: 如果不使用DWR,ExtJS通常会配合RESTful服务进行数据交互,这时AjaxProxy是常用的Proxy类型。 6. **CRUD操作**: 创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)是数据交互的基础,...

    extjs3.0例子

    在这个“extjs3.0例子”中,我们将深入探讨EXTJS的核心概念、常用对象及其使用方法。 EXTJS的核心在于它的组件模型,其中包括窗口(Window)、面板(Panel)、表格(Grid)、表单(Form)、菜单(Menu)等。这些...

    Extjs4 多选下拉树

    4. **Json Store**: 数据存储在JSON格式中,这是ExtJS常用的存储方式。我们需要创建一个`Ext.data.TreeStore`,并指定它的`root`、`proxy`(通常是`AjaxProxy`)以及`model`,确保数据能正确加载到TreePanel中。 5....

    ExtJs_grid.txt

    其中,Grid是ExtJs中最常用的数据展示组件之一,它能够以表格形式显示数据,并提供了丰富的交互特性,如排序、筛选、分页等。 在ExtJs中,Grid的构建主要包括以下核心部分: - **ColumnModel**: 用于定义Grid中的...

    Extjs测试题

    基本组件是构建用户界面的基础元素,工具栏组件提供常用的界面组件如按钮、菜单等,数据通信组件帮助与服务器进行数据交换,表单及元素组件用于创建表单和表单元素。 3. 创建组件的方式:ExtJS允许开发者使用new...

    ExtJs grid多选时获取选中的所有值

    其中,Grid Panel(简称 Grid)是ExtJs中最常用的一个组件之一,用于展示表格数据。在实际业务场景中,经常需要支持用户对表格中的多行数据进行选择,并执行批量操作,如删除、编辑等。因此,掌握如何在ExtJs Grid中...

    ExtJS设计模式

    - `Ext.data.Store` 是一个常用的数据存储类,它支持通过代理配置来指定数据来源。例如,使用`HttpProxy`代理类型可以从服务器端获取JSON格式的数据。 - **示例代码**: ```javascript var store = new Ext.data....

    前台Extjs学习资料

    在开发培训中,你会了解到如何创建基本的页面结构,使用Store和Model进行数据操作,掌握Grid面板、表单组件、菜单、工具栏等常用元素的使用,同时学习到如何进行事件处理和自定义组件开发。此外,文档可能还会涉及...

    ExtJS 使用grid显示数据

    它提供了大量的组件和功能,包括网格(Grid)这种常用的数据显示控件。这篇博客文章 "ExtJS 使用grid显示数据" 可能详细阐述了如何利用ExtJS的Grid面板来展示和操作数据。 在ExtJS中,Grid Panel是一种数据驱动的...

    ExtJS 3.x中文API

    Store、Model和Proxy是数据绑定的三大组成部分。 4. **表单(Forms)**:ExtJS提供了强大的表单创建和处理功能,包括各种输入控件、验证规则以及远程提交能力。 5. **网格(Grids)**:网格组件是展示和操作大量...

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

    《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计...

    EXTJS 行列转换

    在EXTJS中,Grid组件是用于展示大量数据的常用工具,它可以支持多种数据源,包括本地数据和远程数据(如通过Ajax请求从服务器获取)。 动态Grid的实现主要分为以下几个步骤: 1. **数据模型定义**:在EXTJS中,...

Global site tag (gtag.js) - Google Analytics