关于struts2中ajax标签的一点学习笔记
其实ajax的东西不是很熟悉,而且对于javascript这样零碎的语言实在是很抗拒。于是过去一直都逃避它,迫于项目的压力,不得已惟有硬碰硬了。为了快速上手,之前做了几个小实验,代码实在太多了。幸好struts2提供了一些ajax的简易实现。
跟网上所有的教程一样,先从最简单的开始吧~
在头结点加上<s:head theme="ajax"/>
然后
<s:url id="requesturl" value="/get.action"></s:url>
<s:div id="information" theme="ajax"></s:div>
<s:a targets="information" theme="ajax" href="%{requesturl}" mce_href="%{requesturl}">获取信息</s:a>
服务器端的代码我就不写了,大同小异。返回的可以是任何东西,各种表单、表格、图什么的,具体要看你请求的是什么。返回的资源会直接显示在information的div中。这里有个小问题要注意,requesturl中的value值必须是/*.action的形式,而不能是struts.xml中的对应的action名称。
关于其他的属性就不实验了。
接下来加上一点javascript的操作,用文本按钮操作返回资源的显示和隐藏。
于是很自然的想到这样写:
<mce:script type="text/javascript"><!--
function hide(var i){
document.getElementById(i).style.display="none";
}
// --></mce:script>
然后把div的id值传进去,完成!但是失败。。这个函数完全执行不了。
这个问题困扰了我很久,我尝试了各种各样的方法,最后发现,javascript的函数传值机制跟平时写的C++和JAVA是有区别的。
在上面的代码中只要改成function hide(i){...}就可以执行了。
为什么这样呢?
原来的代码大概类似于java中的String newcopy = prototype.clone();
该函数新申请了一个地址并接受了与该参数等值的值,因此getElementById()去了另外一个地址寻找节点,而那里没有我们要操作的节点,于是调用该函数的时候没反应。囧,知识还得系统的学才行,半桶水太危险了。
另外关于onclick中的函数调用也有一个容易疏忽的地方,比如有个<div id="a"></div>,传值的时候应该是hide('a')而不是hide(a),也是个困扰了我很久的低级问题。。
相关文档:
关于在AJAX中GET回的ResponseText中文乱码的最简解决办法
//如果传送参数是直接赋予的,就会产生乱码!
代码如下:
http_request.open("POST",url,true);
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
http_request.send("action="+strName+"&val="+val); //如果val的 ......
<script language="javascript" type="text/javascript">
function doubleSalary()
{
var employee = new Object();
employee.FirstName = "X";
employee.LastName = "PP";
employee.Salary = 1000;
......
原来用jQuery的ajax方式调用asp.net页面基本都是调用单个页面,由调用页面Response内容,而现在采用asp.net ajax后,我们则可以更完美的使用jQuery和asp.net结合了,代码如下:
<asp:ScriptManager ID="ScriptManager1" runat="server" >
<Scripts>
<asp:ScriptReference Path="http ......
<input type="button" onclick="ajaxTest()" value="AJAX测试">
<input type="button" onclick=" document.getElementById('weather').innerHTML='' " value="隐藏">
<mce:script type="text/javascript"><!--
// 1. 初始化 请求 对象
// Mozilla/Firefox 下的
//var xmlhttp = ne ......