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

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

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

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

html页面如下:

[html]

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

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

[Js]

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#]

        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]

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#]

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]

<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]

    //文件上传
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#]

        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]

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

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

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

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

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

[html]

    <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]

Ext.get("div1").getUpdater().update({
url: "Ext/UpdaterFunc",
params: { a: 10, b: 3 }
});

[c#]

        public ContentResult UpdaterFunc(int a,int b)
{
return Content("a+b=" + (a + b));
}

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

[Js]

        Ext.get("div1").load({
url: "Ext/UpdaterFunc",
scripts: true,
params: { a: 10, b: 47 },
text: "请等待..."
});

2.通过提交表单更新

[Js]

Ext.get("div1").getUpdater().formUpdate("form1", "Ext/UpdaterFunc");

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

3.周期性更新

[Js]

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

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

ExtJs4 笔记(3) Ext.Ajax 对ajax的支持的更多相关文章

  1. ExtJs4 笔记(4) Ext.XTemplate 模板

    ExtJs4 笔记(4) Ext.XTemplate 模板 摘自:http://www.cnblogs.com/lipan/ 本篇将涉及到ExtJs中一个重要的概念,模板.话说Razor很神奇,但是我 ...

  2. Ext修改所有Ajax的timeout

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

  3. MVC Ajax Form & Ajax Valida(笔记)

    1.引入必要的文件 <script src=.min.js")" type="text/javascript"></script> &l ...

  4. Django学习笔记之利用Form和Ajax实现注册功能

    一.注册相关的知识点 1.Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面建一个forms.py的文件来存放 2 ...

  5. 学习笔记:IDEA、原生ajax的三道练习题、Markdown

    前言 该从何说起呢?想写博客好久了,正好这个学期课很少(大三),可以静下心来写点东西(虽然事情依旧很多),总感觉记录和分享是一件很酷的事情.第一篇博客,第一次使用Markdown写博客,第一次使用ID ...

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

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

  7. jquery+ajax(用ajax.dll)实现无刷新分页

    利用ajax.dll那种方式的无刷新,在这就不说了,新朋友可以看下我的另一片文件http://www.cnblogs.com/dachuang/p/3654632.html 首先,这里用的是jquer ...

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

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

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

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

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

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

随机推荐

  1. (Relax njuptoj)1009 数的计算(DP)

    其实DP 的关键在于找到子问题的结构.  我们规定arr[i][j]为在j左边填写i时的数的个数,很明显:  arr[i][j]=a[0][i]+a[1][i]+...+arr[i/2][i](i&l ...

  2. DotNet命名规范参考(转)

    来自:http://www.cnblogs.com/w-y-f/archive/2012/05/30/2526254.html DotNet命名规范参考 一.命名规范 注意事项:使用英文命名规则,尽量 ...

  3. 11-UIKit(Storyboard、View的基本概念、绘制图形、UIBezierPath)

    目录: 1. Storyboard 2. Views 3. View的基本概念介绍 4. 绘制图形 5. UIBezierPath 回到顶部 1. Storyboard 1.1 静态表视图 1)Sec ...

  4. CSS鼠标样式

    1.缺省方式(箭头形状): cursor:default; 2.手型 cursor: pointer;   //通用的cursor: hand;     //为了兼容ie老版本,可以同时写上

  5. C#中ref参数及out参数对比

    ref 关键字和out关键字均会导致参数通过引用来传递(相同点1).这是两者的共同点. 通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中. 两者还有一个共同点,那就是:若要使用 re ...

  6. 怎样建立一个bower私库

    本教程适用于centos 安装之前 检查nodejs 假设没安装nodejs依照下面步骤安装 $ su - $ yum install openssl-devel $ cd /usr/local/sr ...

  7. 基于visual Studio2013解决C语言竞赛题之1020订票

         题目 解决代码及点评 /* 某航空公司规定:在旅游旺季7─9月份,若订票超过20张,优惠票价的15%,20张以下,优惠5%: 在旅游淡季1─5月.10月.11月份订票超过 ...

  8. if(男深圳集体户口&&女非深圳户口)深圳准生证办理材料及流程

    所需材料 一.女方需要办理流动人口婚育证明(蓝色的小本本). 办理材料.各地可能不同.这个是在女方的户籍所在地办理(最好在女方户籍所在地办理女方初婚未育证明). 二.男方在公司开出初婚未育证明. 三. ...

  9. CentOS下利用sshpass不用手动输入密码远程执行命令

       在测试的时候要同时操作多台机器,每次都要挨个去执行几乎相同的命令或者修改一些设置,这样很影响工作效率也很烦,所以就想写一个脚本,远程自动去做这些操作.远程执行命令很简单,但是不能在执行命令加上命 ...

  10. Qt QDebug等重定向到文件中

    源地址:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/ Qt的qDebug() 等函数,可以打印出十分细致的 ...