无废话ExtJs 系列教程十七[数据交互:AJAX]
1.代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <!--ExtJs框架开始--> <script type="text/javascript" src="Ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="Ext/ext-all.js"></script> <link rel="stylesheet" type="text/css" href="Ext/resources/css/ext-all.css" /> <!--ExtJs框架结束--> <!-- <script type="text/javascript" src="study/helloWorld.js"></script> <script type="text/javascript" src='study/window.js'></script> <script type="text/javascript" src='study/formPanel.js'></script> <script type="text/javascript" src='study/textField.js'></script> <script type="text/javascript" src='study/button.js'></script> <script type="text/javascript" src='study/login.js'></script> --> <!--调用/study/ajax.js --> <script type="text/javascript" src="Ext/src/locale/ext-lang-zh_CN.js"></script><!--中文日期翻译-js--> <script type="text/javascript" src="study/kindeditor/kindeditor.js"></script> <script type="text/javascript" src='study/ajax.js'></script> <style type="text/css"> .loginicon { background-image: url(study/login.gif) !important; } </style> <style type='text/css'> .x-form-unit { height:22px; line-height:22px; padding-left:2px; display:inline-block; display:inline; } </style> </head> <body> <!--------------------- 上层 --> <!-- 这里使用ContainerLayout: 垂直方式布局 --> <div id='ContainerLayout' style='float:left;width:300px'></div> <!-- padding-left 是用来填充间隔,如果没有则两个容器/组件会完全挨着 --> <div id='hello' style='float:left;width:300px;padding-left: 10px'></div> <div id='right-upward' style='float:left;width:700px;padding-left:15px'></div> <!--------------------- 中间------------------------------------> <div id='BorderLayout' style='padding: 20px 0px 0px 0px;clear:both'></div> <!--------------------- 底层------------------------------------> <div id='accordionLayout' style='float:left;padding:20px 0px;width:300px;height:200px'></div> <!-- 两个Panel渲染同一div,不会相互覆盖,会上下依次显示 --> <div id='fitLayout' style='float:left; padding:20px 0px 0px 20px;height:30px'></div> <!-- 表格布局 --> <div id='tableLayout' style='float:left; padding:20px 0px 0px 20px;height:30px;width:100px'></div> </body> </html>
2. ajax.js 代码如下:
Ext.onReady(function(){ //创建Panel var panel = new Ext.Panel({ title:'Ajax与数据显示', width:400, height:350, style:'margin:30px', bodyStyle:'padding: 10px 0px 10px 30px', frame:true }); /* * 配置项URL: * url:'./study/sample.json', //这里原本应该请求地址,如:/../ajax.do ,为了快速学习,暂时先指定一个json文件,我是通过看EXT3.0 API url: 'ajax_demo/sample.json', 学习的:-D * 这里的url的值不能是声明的变量(如url:urlData 或url:'urlData')!必须是地址路径! * * * 配置项PARAMS: * params: { id: 1 }参数,我们在做内容页时,经常会这样使用“根据编号取出详细信息”,这个参数在本例中并没有实际意义,在这里只显示用法。 * * * 配置项SUCCESS: * success: function (response, options) {}成功时执行方法。这里有两个参数: * (1)response:服务端返回的数据,通过response.responseText来获得XMLHttpRequest的数据,并通过Ext.util.JSON.decode方法把字符串转换成json对象。 * (2)options:向服务端发送的对象。 * * *<--------------以下是对日常函数里的参数是什么,怎么查看该参数做出解析-------------------------> * 我们在开发中,经常会遇到这样的问题,就是不知道参数是做什么用的,传的是什么,当我们 alert(parm)的时候,弹出的是[Object]或是[Object][Object]。 * 那么我们怎么样知道他到底传的是什么呢?我在上页的代码中写了这样的程序: * for (i in options) { * alert('options参数名称:' + i); * alert('options参数[' + i + ']的值:' + options[i]); * } * 对象我们不知道的对象 options 我们用 for 语句进行遍历,看看对象里存的是什么,这样就可以判断对象是什么了。 * for(){}:不知属性个数时,用于对某个对象的所以属性进行循环操作,返回字符串形式的属性名,获取属性值方式。 * 那如果,我们的子对象还是 Object 怎么办? * for (i in options) { * alert('options参数名称:' + i); * alert('options参数[' + i + ']的值:' + options[i]); * //方式一,判断子对象类型,如果是object则继续遍历子对象 * if (typeof (options[i]) == 'object') { * for (j in options[i]) { * alert('子对象名称:' + j); * alert('子对象值:' + options[i][j]); * } * } * } * //方式二,options[i].toSource(),查看对象源码。 * //语法:object.toSource() 注:该方法在 Internet Explorer 中无效。 * <----------------------------------结束-----------------------------------------> * */ //var urlData = {id:1,name:'张三',brithday:2001-01-01,height:178,sex:'0',discribe:'张三是一个.net软件工程师<br />现在正在学习ExtJs。'} //获取数据 Ext.Ajax.request({ //创建一个AJAX请求! //系统加载时就会调用它!不受Window组件影响, 所以不需要New url:'./study/sample.json', method: 'post', params: {id:1}, success: function (response, options) { //成功时执行的函数! // alert(response) // for (i in response) { //完全可以没有以下for循环, 只为让自己和大家看清楚,Ajax是在页面加载时就会被优先加载进来 // alert('options参数名称:' + i); // alert('options参数[' + i + ']的值:' + response[i]); // if(typeof(response[i])=='object'){ // for(j in response[i]){ // alert('子对象:'+j); // alert('子对像['+j+']的值:' + response[i][j]); // } // } // } var responseJson = Ext.util.JSON.decode(response.responseText); //把字符串转换成json对象 alert(responseJson); template.compile(); //编译模板。 template.overwrite(panel.body, responseJson); //把数据填充到模板中。 }, failure:function(){ alert('系统出错,请联系管理人员...'); //当url找不到路径及函数里面出错时会在这里提示给用户 } }); //创建模板对象,常用于数据显示,也就是我们在开发中提到的“内容页或详细页”。 var template = new Ext.XTemplate( '<table id="template">', '<tr><td>Number:</td><td>{id}</td></tr>', //中间的{id}占位符要和我们在后台输出 json 对象对应。 '<tr><td>Name:</td><td>{name}</td></tr>', '<tr><td>Birthday:</td><td>{brithday}</td></tr>', '<tr><td>Height:</td><td>{height}</td></tr>', '<tr><td>Sex:</td><td>{sex}</td></tr>', '<tr><td valign="top">Discribe</td><td>{discribe}</td></tr>', '</tabel>' ); new Ext.Window({ title:'Window', id:'window', width:476, height:476, modal:true, closable:true, minimizable:true, maximizable:true, items:[panel] //注这里也可直接写items:panel,因为只一个参数,当两个参数时items:[panel,xxx] }).show(); });
3. 效果如下:
注1, 当url值错误时页面:
Ext.Ajax.request({ //创建一个AJAX请求! //系统加载时就会调用它!不受Window组件影响, 所以不需要New url:'./study/sample.json', //如果这里url的值不是路径,而是一个具体值时的结果如下:
注2, 查看参数时的页面:
日常函数里的查看参数是什么,怎么查看该参数? alert('options参数名称:' + i); alert('options参数[' + i + ']的值:' + response[i]);
相关推荐
yangkang 2020-11-09
lbyd0 2020-11-17
sushuanglei 2020-11-12
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
wushengyong 2020-10-28
lizhengjava 2020-11-13
星月情缘 2020-11-13
huangxiaoyun00 2020-11-13
luyong0 2020-11-08
腾讯soso团队 2020-11-06
Apsaravod 2020-11-05
PeterChangyb 2020-11-05
gaobudong 2020-11-04
wwwjun 2020-11-02
gyunwh 2020-11-02
EchoYY 2020-10-31
dingyahui 2020-10-30