转自:http://www.cnblogs.com/lipan/archive/2011/12/09/2272793.html

本篇主要介绍一下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; 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,用于需要适时核对服务端和客户端状态的情形。

作者:李盼(Lipan)
出处:[Lipan]http://www.cnblogs.com/lipan/
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。

12. Ext.Ajax 对ajax的支持的更多相关文章

  1. JavaScript学习总结【12】、JS AJAX应用

    1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...

  2. 12款优秀 jQuery Ajax 分页插件和教程

    12款优秀 jQuery Ajax 分页插件和教程 在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 W ...

  3. 使用 fetch 代替 ajax(在不支持的浏览器上使用 XHR); This kind of functionality was previously achieved using XMLHttpRequest.

    原生 JS Ajax,GET和POST 请求实例代码_javascript技巧_脚本之家 https://www.jb51.net/article/86157.htm 更新时间:2016年06月08日 ...

  4. Ext修改所有Ajax的timeout

    Ext修改所有Ajax的timeout stackoverflow上的解决方案 //需要在初始化viewport时执行 //方法一重写 Ext.Ajax.timeout= 60000; Ext.ove ...

  5. 解决ajax请求默认不支持重定向问题

    1,Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面. 2,后台代码处理: @RequestMapping("/updateCurrentUser") public Str ...

  6. laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)

    laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...

  7. jQuery Ajax 实例 ($.ajax、$.post、$.get)

    jQuery Ajax 实例 ($.ajax.$.post.$.get) 转 Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. ...

  8. 什么是ajax,ajax原理是什么 ,优缺点是什么

    AJAX工作原理及其优缺点   1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页 ...

  9. Ajax学习---Ajax基础学习 180128

    AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为 ...

  10. django与ajax:ajax结合sweetalter ,批量插入数据 ;分页器组件

    目录 一.ajax结合sweetalter 二.bulk_create批量插入数据 三.简易版分页器推导 1. 推导步骤 四.自定义分页器的使用 1. 自定义分页器模板 2. 使用方法 (1)后端代码 ...

随机推荐

  1. 版本控制git之一 仓库管理 安装 基础

      版本控制git之一-仓库管理 git ​ 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业 ...

  2. <struct、union、enum>差异

    关于C++和C的区别 区别最大的是struct,C++中的struct几乎和class一样了,可以有成员函数,而C中的struct只能包含成员变量. enum,union没区别. struct的定义 ...

  3. 2017 GDCPC 省赛总结

    第一年参加省赛,也是我接触acm半年多的第一个正式省级赛事,这半年来我为acm付出的可能很多,但经历过这次省赛后,给我唯一的感觉就是,还不够多. 直接分析题目吧,开始拿到试题后我读的是A题,然后我的队 ...

  4. [bzoj2822][AHOI2012]树屋阶梯 (卡特兰数+分解质因数+高精度)

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  5. ARM中的---汇编指令

    一. 带点的(一般都是ARM GNU伪汇编指令) 1. ".text".".data".".bss" 依次表示的是"以下是代码段& ...

  6. Light oj-1002 - Country Roads,迪杰斯特拉变形,不错不错~~

                                                                                               1002 - Co ...

  7. eclipse安装Aptana 插件,并设置使之能提示css,js,html,帮助编写代码

    在Eclipse 4.2 上安装 Aptana 3.2遇到的错误 就是找不到什么文件来着,我在装maven的时候也遇到了. 烦人... (这文章是我还在用eclipse的时候,为了编写js代码的时候提 ...

  8. 搭桥(codevs 1002)

    题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...

  9. QQ5.0侧滑

    package com.example; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; impo ...

  10. CALayer之 customizing timing of an animation

    customizing timing of an animation Timing is an important part of animations, and with Core Animatio ...