`

jquery调用struts2,返回script/text/json格式的数据

    博客分类:
  • ajax
阅读更多
本文在ajax中调用struts2 action ,查询数据库,然后返回字符串,演示返回script,text,json类型的数据的用法


一。返回script和text时代码都一样

ajax-jquery.js
function commonAjax(oper,prod,url){
    oper.bind("change",function(){comJquery(oper,prod,url)});
    prod.bind("change",function(){comJquery(oper,prod,url)});
}
function comJquery(oper,prod,url){
			var prodId=prod.val();
	    	if(oper.val()!=''&&prod.val()!=''&&prod.val()!=0&&prod.val()!=-1){
    	   		jQuery.ajax({
					url : url,
					data : {productId : prodId},
					type : "post",
					cache : false,
					dataType : "script"或者"text",
					success:callback
					});
	    	}else{
	    		$("#company").html('');
	    	}
}

function callback(data){ 
    $("#company").html(data);
}


jsp页面调用ajax js(不管返回什么类型,调用的代码都一样)
<script type="text/javascript" src="script/jquery.js"></script>
<script type="text/javascript" src="script/json2.js"></script>
<script type="text/javascript" src="script/ajax-jquery.js"></script>

var op=$("#cbApplySubmit_changeApplyFormBO_operationId");
var pr=$("#cbApplySubmit_changeApplyFormBO_productId");   
var url="${contextPath}/assets/businessChange/ajaxGetCompany.do"; 
commonAjax(op,pr,url);   



struts2 action

private Integer productId;
private IProductMng productMng; // 通过spring注入的service

// get set

public void ajaxGetCompany() throws Exception {
		ProductBO prod = productMng.loadProduct(productId);
		Integer companyId = prod.getCompanyId();
		CompanyBO comp = productMng.loadCompany(companyId);
		String message = "事业部为:" + comp.getName();
		sendMsg(message);
	}
	
	public void sendMsg(String content) throws IOException{    
        HttpServletResponse response = ServletActionContext.getResponse();    
        response.setCharacterEncoding("UTF-8");    
        response.getWriter().write(content);    
    }    







二。返回json格式

function commonAjax(oper,prod,url){
    oper.bind("change",function(){comJquery(oper,prod,url)});
    prod.bind("change",function(){comJquery(oper,prod,url)});
}
function comJquery(oper,prod,url){
			var prodId=prod.val();
	    	if(oper.val()!=''&&prod.val()!=''&&prod.val()!=0&&prod.val()!=-1){
    	   		jQuery.ajax({
					url : url,
					data : {productId : prodId},
					type : "post",
					cache : false,
					dataType : "json",
					success:callback
					});
	    	}else{
	    		$("#company").html('');
	    	}
}

function callback(data){ 
    $("#company").html(data[0].msg);  // 因为json对象中只有一个值
// 完整写法如下
//function callback(data){
//	var buf="";
//	for(var i=0;i<data.length;i++){
//		buf+=data[i].msg;
//	}
//	$("#company").html(buf);
//} 
} 



struts2 action 需要组装json对象
import net.sf.json.JSONArray;

	public void ajaxGetCompany() throws Exception {
		ProductBO prod = productMng.loadProduct(productId);
		Integer companyId = prod.getCompanyId();
		CompanyBO comp = productMng.loadCompany(companyId);
		String message = "事业部为:" + comp.getName();
		JSONArray jsonObj = JSONArray.fromObject("[{msg:'" + message +"'}]");
		sendMsg(jsonObj.toString());
	}
	
	public void sendMsg(String content) throws IOException{    
        HttpServletResponse response = ServletActionContext.getResponse();    
        response.setCharacterEncoding("UTF-8");    
        response.getWriter().write(content);    
    }    




分享到:
评论
1 楼 hardwin 2009-11-10  
试了一下,返回的如果是纯文本,dataType 设为text,html,script都可以。而且dataType参数不设置也可以,默认是文本。在返回纯文本的情况下,最好不用script类型,结果是出的来,但是IE下会报一个错误:提示你返回的那个字符串未定义
我在找原因和解决办法,找到了再来补上

相关推荐

Global site tag (gtag.js) - Google Analytics