12. Ext.Ajax 对ajax的支持
转自: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] (http://www.cnblogs.com/lipan/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。
12. Ext.Ajax 对ajax的支持的更多相关文章
- JavaScript学习总结【12】、JS AJAX应用
1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...
- 12款优秀 jQuery Ajax 分页插件和教程
12款优秀 jQuery Ajax 分页插件和教程 在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 W ...
- 使用 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日 ...
- Ext修改所有Ajax的timeout
Ext修改所有Ajax的timeout stackoverflow上的解决方案 //需要在初始化viewport时执行 //方法一重写 Ext.Ajax.timeout= 60000; Ext.ove ...
- 解决ajax请求默认不支持重定向问题
1,Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面. 2,后台代码处理: @RequestMapping("/updateCurrentUser") public Str ...
- laravel基础课程---12、lavarel的ajax操作2(lavarel的ajax使用总结)
laravel基础课程---12.lavarel的ajax操作2(lavarel的ajax使用总结) 一.总结 一句话总结: 比较简单:就是js请求ajax,然后控制器获取请求参数,返回数据即可 1. ...
- jQuery Ajax 实例 ($.ajax、$.post、$.get)
jQuery Ajax 实例 ($.ajax.$.post.$.get) 转 Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. ...
- 什么是ajax,ajax原理是什么 ,优缺点是什么
AJAX工作原理及其优缺点 1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页 ...
- Ajax学习---Ajax基础学习 180128
AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输的数据为 ...
- django与ajax:ajax结合sweetalter ,批量插入数据 ;分页器组件
目录 一.ajax结合sweetalter 二.bulk_create批量插入数据 三.简易版分页器推导 1. 推导步骤 四.自定义分页器的使用 1. 自定义分页器模板 2. 使用方法 (1)后端代码 ...
随机推荐
- hdu 4948 Kingdom(推论)
hdu 4948 Kingdom(推论) 传送门 题意: 题目问从一个城市u到一个新的城市v的必要条件是存在 以下两种路径之一 u --> v u --> w -->v 询问任意一种 ...
- DAG模型(矩形嵌套)
推荐在线例题:http://acm.nyist.net/JudgeOnline/problem.php?pid=16 题摘: 矩形嵌套 时间限制:3000 ms | 内存限制:65535 KB 难 ...
- vector元素的删除 remove的使用 unique的使用
在vector删除指定元素可用以下语句 : v.erase(remove(v.begin(), v.end(), element), installed.end()); 可将vector中所有值为el ...
- Java反射机制(Reflect)解析-----https://www.cnblogs.com/fzz9/p/7738381.html
Java反射机制(Reflect)解析-----https://www.cnblogs.com/fzz9/p/7738381.html
- markman & psd
markman & psd MarkMan 设计稿标 & 测量神器 http://www.getmarkman.com/ https://www.jianshu.com/p/83af3 ...
- hdu 1179最大匹配
#include<stdio.h> #include<string.h> #define N 200 int map[N][N],visit[N],link[N],n,m; i ...
- MT6753/MT6755 呼吸灯功能添加
利用mtk pmic自带的呼吸灯模式: 主要修改代码: kernel-3.10/drivers/misc/mediatek/leds/mt6755/leds.c int mt_brightness ...
- tyvj1045 最大的算式
描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量大.因为乘号和加号一共就是N-1个了,所以恰好每两个相邻数字之间都有一个符号.例 ...
- Linux下汇编语言学习笔记20 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Codeforces 803F(容斥原理)
题意: 给n个正整数,求有多少个GCD为1的子序列.答案对1e9+7取模. 1<=n<=1e5,数字ai满足1<=ai<=1e5 分析: 设f(x)表示以x为公约数的子序列个数 ...