使用json插件

struts2中使用json插件,需要安装json插件
[url]http://code.google.com/p/jsonplugin/download/list[/url]
为了编程方便,通常还使用Prototype.js函数库。开发时将插件包放在lib下,在页面中引用js文件,即可进行,一般的应用搜索json表单都可以查到,这里只是描述一下一些特殊的情况。
1 通常我们都是提交表单的所有元素,或者单个元素,那么多个自定义的元素该怎么办。参照Prototype的获取整个表单的函数写法,可以使用push方法将单个序列化的元素放进数组里,最后进行join('&')方法,即可对自定义的多个字段完成序列化。
function validateName(){
  var url = 'myaction.action';//action
  var params = new Array();
  var input1= Form.Element.serialize('input1');
  var input2 = Form.Element.serialize('input2');
  params.push(input1);
  params.push(input2);
  params =params.join('&');
  var myAjax = new Ajax.Request(
  url,
  {
   method:'post',//post or get
   parameters:params,//params
   onComplete: processResponse,//回调函数
   asynchronous:true//是否异步请求
  });
 }
   
 function processResponse(request){
  var action = request.responseText.parseJSON();
  $("tip").innerHTML = action.tip;//在指定的html项填充表单
 }
 
2  json的编码问题
因为json使用utf-8编码完成请求,因此在一般情况下,struts2.i18n.enchoding通常都使用utf-8,为了编码统一,页面也一般会采用utf-8,这样的情况下json是不会有什么问题的。
但是如果应用已经使用了gbk编码,或者不知道什么原因,json就是有乱码问题。那么我们可以在js函数中对参数显式进行utf-8编码,比较简单的就是直接使用js的encodeURI()函数对参数进行编码,加一行params =encodeURI(params )即可。到服务端以后可以进行相应的解码java.net.URLDecoder
 
3 json对应的action包空间继承的是json-default包,而不是struts-default包,返回时也只需要指定<result type="json"/>,不需指定页面。
 
4 ajax处理表单时,通常需要提供loading页面或其他相似措施,防止用户重复提交,其中最简单的方法就是将按钮灰化或隐藏,在按钮的onClick事件对应的js函数中可以写入如下语句:
 
js中隐藏服务器端按钮的方法
document.all("按钮ID").style.display='none';
js中灰化服务器端按钮的方法
 document.all.item("按钮ID").disabled='none';
 
如果按钮没有在ajax事件中更新,那么在回调过程中,我们还需要恢复按钮,同样简单分别是:
document.all("按钮ID").style.display='';
 document.all.item("按钮ID").disabled=''
 
有json相关问题会陆续添加,欢迎讨论

你可能感兴趣的:(Ajax,json,struts2,职场,休闲)