`
923080512
  • 浏览: 190835 次
  • 性别: Icon_minigender_1
  • 来自: 商丘
社区版块
存档分类
最新评论

ExtJs4 笔记(3) Ext.Ajax 对ajax的支持

 
阅读更多

本篇主要介绍一下ExtJs常用的几个对JS语法的扩展支持,包括Ajax封装,函数事件操作封装,还有扩展的常用函数等。Ajax服务端交互式操作是提交到.NET MVC。后续服务端交互都采用这一方式实现。

一、ExtJs中的Ajax:Ext.Ajax.request

通过客户端向服务端发送Ajax请求,可以“直接”调用MVC的action方法,并传递参数,action返回值可以是普通字符串,也可以是json对象。请求可以添加自定义头信息。看下面例子:

1.异步请求,发送自定义请求头:

html页面如下:

[html]
1
2
3
4
<h1>Ajax服务端请求</h1>
<div class="content" id="div1">
<div>一共发起了<span id="span1" style="color:Red">0</span>次请求。</div>
</div>

我们先通过一个按钮单击事件触发ajax请求,服务端返回string到客户端,异步请求时,为请求添加自定义头“userHeader”,并在服务端获取。如下是js代码:

[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Ext.onReady(function () {
    new Ext.Button({
        renderTo: "div1",
        text: "后台Ajax提交",
        handler: function () {
            Ext.Ajax.request({
                url: 'Ajax_Func1',
                headers: {
                    'userHeader': 'userMsg'
                },
                params: { a: 10, b: 20 },
                method: 'GET',
                success: function (response, options) {
                    Ext.MessageBox.alert('成功', '从服务端获取结果: ' + response.responseText);
                },
                failure: function (response, options) {
                    Ext.MessageBox.alert('失败', '请求超时或网络故障,错误编号:' + response.status);
                }
            });
        },
        id: "bt1"
    });
 
});

服务端MVC接受请求的action代码:

[C#]
1
2
3
4
5
public ContentResult Ajax_Func1(int a, int b)
{
    string userHeaderMsg = Convert.ToString(Request.Headers["userHeader"]);
    return Content((a + b).ToString() + ",userHeader:" + userHeaderMsg);
}

然后我们在火狐中调试:自定义请求头已被添加。

查看执行结果:

2.异步请求,返回json:

如果要返回json到客户端,MVC需要使用JsonResult的acton,自动将C#对象转换为json格式。客户端代码如下:

[Js]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Ext.onReady(function () {
 
    new Ext.Button({
        renderTo: "div1",
        text: "后台Ajax提交方式2返回JSON",
        handler: function () {
            Ext.Ajax.request({
                url: 'Ajax_Func2',
                params: { n: 10 },
                method: 'POST',
                callback: function (options, success, response) {
                    if (success) {
                        var responseJson = Ext.JSON.decode(response.responseText);
 
                        Ext.Msg.alert("成功", options.params.n + "的阶乘是:<font color='red'>" + responseJson.n1 + "</font><br />"
                      + options.params.n + "的累加是:<font color='red'>" + responseJson.n2 + "</font>");
                    } else {
                        Ext.Msg.confirm('失败',
                                            '请求超时或网络故障,错误编号:[' + response.status + ']是否要重新发送?', function (btn) {
                                                if (btn == 'yes') {
                                                    Ext.Ajax.request(options);
                                                }
                                            });
                    }
                }
            });
        }
    });
 
});

服务端代码:

[C#]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public JsonResult Ajax_Func2(int n)
{
    int n1 = 1;
    int n2 = 0;
    for (int i = 1; i <= n; i++)
    {
        n1 *= i;
        n2 += i;
    }
 
    var data = new
    {
        n1 = n1,
        n2 = n2
    };
 
    return Json(data, JsonRequestBehavior.AllowGet);
}

查看执行结果,我们先看看火狐调试响应的结果,可以查看返回的json内容:

界面执行结果:

3.异步文件上传

ExtJs通过强大的内部封装,使ajax请求看起来可以直接提交二进制流数据。每当提交文件数据时,ExtJs会自动创建iframe,在iframe中提交。提交完成后又自动移去,一切显得天衣无缝。下面演示一个通过异步请求无刷新文件上传的例子:

[html]
1
2
3
4
5
6
7
<h1>Ajax文件上传</h1>
<div class="content" id="div2">
<form id="form1">
请选择文本文件:<input type="file" name="file" />
<input type="button" id="button1" value="上传" />
</form>
</div>
[Js]
1
2
3
4
5
6
7
8
9
10
11
//文件上传
Ext.get("button1").on("click", function () {
    Ext.Ajax.request({
        url: "Ajax_FileUp",
        isUpload: true,
        form: "form1",
        success: function (response) {
            Ext.MessageBox.alert("上传成功,文本文件内容:", response.responseText);
        }
    });
});
[C#]
1
2
3
4
5
6
public ContentResult Ajax_FileUp(HttpPostedFileBase file)
{
    System.IO.StreamReader r = new System.IO.StreamReader(file.InputStream, System.Text.UTF8Encoding.Default);
    var str = r.ReadToEnd();
    return Content(str);
}

提交后我们发现,上传的文本文件内容已经被正确读取。

4.异步请求事件

当发起ajax请求之前,可以监听beforerequest事件,本例每当发起ajax事件时,都会把计算器+1:

[Js]
1
2
3
var ajaxCount = 0;
//每当Ajax请求发起时触发:
Ext.Ajax.on('beforerequest', function () { Ext.get("span1").update(++ajaxCount) }, this);

这样,每当ajax发起就可以被记录,可用作日志等。

二、元素对象Ajax式更新:Ext.Updater,[已弃用]

ExtJs为我们提供了异步方式更新dom元素内容的支持。这可以用在一些异步交互性比较强的地方,例如webgame等。我们来看看具体实现方式。

我们先在视图中写这样的html:

[html]
1
2
3
<div id="div1" title="d1" style="width:50px; height:50px; position:absolute; background-color:Green; top:100px">1</div>
<div id="div2">2</div>
<form id="form1"><input id="a" name="a" value="20" /><input id="b" name="b" value="50" /></form>

1.单个元素的及时更新

现在,我要通过c#在服务端计算a+b的值,然后将结果填到div1元素里面:

[Js]
1
2
3
4
Ext.get("div1").getUpdater().update({
    url: "Ext/UpdaterFunc",
    params: { a: 10, b: 3 }
});

[c#]
1
2
3
4
public ContentResult UpdaterFunc(int a,int b)
{
    return Content("a+b=" + (a + b));
}

页面加载后,将自动更新div1。再看看另外一种写法:

[Js]
1
2
3
4
5
6
Ext.get("div1").load({
    url: "Ext/UpdaterFunc",
    scripts: true,
    params: { a: 10, b: 47 },
    text: "请等待..."
});

2.通过提交表单更新

[Js]
1
Ext.get("div1").getUpdater().formUpdate("form1", "Ext/UpdaterFunc");

效果一样,只不过提交的参数来源于表单,参数名为对应的name值。

3.周期性更新

[Js]
1
2
3
//周期性更新
var up = new Ext.Updater("div1");
up.startAutoRefresh(5, "Ext/UpdaterFunc", { a: 10, b: 47 });

这段代码运行后将每隔5秒钟更新一次div1,用于需要适时核对服务端和客户端状态的情形。

分享到:
评论

相关推荐

    extJs 2.1学习笔记

    2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy篇 19 10. Ext.data....

    extJs+2.1学习笔记.pdf

    15. **extJs 2.0 学习笔记(Ext.Panel终结篇)** Panel是构建UI的基本组件,涵盖了布局、标题、工具栏等多种功能。掌握Panel的使用和配置,能创建复杂而灵活的界面。 16. **extJs 2.0 学习笔记(事件注册总结篇)*...

    ExtJs4_笔记.docx

    本笔记详尽地探讨了ExtJs4框架的多个核心功能,包括DOM操作、JS语法扩展、Ajax支持、模板系统、按钮、消息对话框、提示、滚轴与进度条控件、面板与窗口、布局管理、选项卡、数据视图、工具栏、分页栏、状态栏、菜单...

    老师整理的extjs学习笔记

    ### ExtJS 学习笔记概览 #### 一、ExtJS 入门 **1.1 ExtJS 构成及如何引用** ExtJS 是一款基于 JavaScript 的开源框架,专为 Web 应用程序的前端界面设计。其核心优势在于提供了一套丰富的 UI 组件和强大的数据...

    Extjs3.4+Ext-core.pdf+轻松搞定Extjs.pdf

    本资源包包含了与ExtJS 3.4相关的学习资料,包括`Ext-core.pdf`、`轻松搞定Extjs.pdf`以及`Extjs学习笔记.docx`,旨在帮助初学者或有经验的开发者更好地理解和掌握ExtJS 3.4。 `Ext-core.pdf` 是关于Ext Core的文档...

    ExtJs学习笔记,共30讲

    3. **Ext.form概述**:介绍了ExtJs的表单组件,包括文本框、下拉框、复选框、按钮等,以及如何创建、验证和处理表单数据。 4. **Ext.TabPanel篇**:讲解了如何使用TabPanel组件创建多标签界面,包括添加、删除和...

    ExtJS4中文教程2 开发笔记 chm

    ExtJS4学习笔记(十五)---Ext.data.Model ExtJS4学习笔记(十六)---Combobox三级联动 ExtJS4学习笔记(十四)--- ComponentQuery ExtJS4学习笔记(四)---Grid的使用 Extjs4开发笔记(三)——菜单的实现 Extjs4开发笔记(二)...

    界面框架extjs学习笔记

    EXTJS in Action 是一本专为学习EXTJS编写的书籍,但这里我们主要关注学习笔记中的关键知识点。 首先,EXTJS的目录结构非常重要,因为它包含了所有必要的资源和源码: 1. `adapter`:这部分包含了适配器,用于将...

    Extjs学习笔记有用

    以上内容只是ExtJS框架中的一部分,实际上ExtJS还包括组件体系(如Grids、Forms、Trees等)、数据模型和Store、布局系统、Ajax通信、主题定制等多个方面。学习ExtJS可以帮助开发者快速构建功能丰富的、交互性强的Web...

    extjs批量上传的所有相关代码和jar,支持包和笔记

    3. **Ajax Upload**: EXTJS的Ajax请求(`Ext.Ajax.request`)可以用来发送文件到服务器进行异步上传。通过监听`change`事件,当用户选择文件后,我们可以获取到文件信息,并使用Ajax发起POST请求,将文件数据发送到...

    Ext 学习总结 pdf版

    - **ExtJs2.0学习笔记(Ajax篇)**:详细介绍了Ext JS 2.0版本中对AJAX的支持及其使用技巧。 - **ExtJs2.0学习笔记(Ext.data序论篇)**:这部分内容是对Ext JS 2.0中`Ext.data`模块的概述,讲解了如何管理和操作数据。...

    ExtJS笔记---Grid实现后台分页

    这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...

    EXTJS实用开发指南_个人整理笔记.pdf

    3. 实用工具(Utils):提供了许多实用工具,如数据内容格式化、JSON数据解码或反解码、对Date、Array、发送Ajax请求、Cookie管理、CSS管理等扩展等功能。 二、EXTJS应用程序的基本结构 EXTJS应用程序的基本结构...

    Extjs复习笔记(十九)-- XML作为tree的数据源

    在本文中,我们将深入探讨ExtJS中的一个关键概念——如何使用XML作为TreePanel的数据源。ExtJS是一个强大的JavaScript库,用于构建复杂的Web应用程序,而TreePanel则是它的一个组件,用于展示层次结构的数据,通常...

    EXT_JS实用开发指南_个人整理笔记

    通常,这包括`extjs/resources/css/ext-all.css`用于样式,`extjs/adapter/ext/ext-base.js`作为适配器,以及`extjs/ext-all.js`包含EXT_JS的核心功能。`Ext.onReady`函数在页面加载完成后执行,是EXT_JS应用的启动...

Global site tag (gtag.js) - Google Analytics