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