日期:2014-05-16 浏览次数:20674 次
ajax跨越请求
?
ajax的跨域(其实我也不知道我这个是ajax跨域还是js跨域,暂时就叫ajax跨越吧)问题一直是个头痛的问题,一直想避开这个问题,哎,可惜避不过啊。最近一个项目里就必须用了。在网上找了一下,有的没说清(呵呵,可能是我的理解能力差),有的不好实施,最后好不容易找到一篇,自己总结了下,跟大家分享。原理很简单,就是动态生成一个script标签,src指向需要访问的jsp或servlet,然后jsp或servlet,输出一个可执行的js方法,这么说可能大家容易晕。所以直接看代码吧,呵呵。
?
一开始是jsp代码,很简单就是一个按钮,点击的时候执行一个test方法。
<input type="button" onclick="test();" value="TEST"/>
?
?
以下是几个封转好的js方法,大家不要看代码多,一切都已经封装好,只需要知道怎么掉就行了,呵呵
?
?
function JSONscriptRequest(url){
this.fullUrl=url;
this.noCacheIE='&dtm='+new Date().getTime();
this.headLoc=document.getElementsByTagName("head").item(0);
}
JSONscriptRequest.prototype = {
buildScriptTag:function(){
this.scriptObj=document.createElement("script");
this.scriptObj.setAttribute("type","text/javascript");
this.scriptObj.setAttribute("id",this.scriptId);
this.scriptObj.setAttribute("src",this.fullUrl+this.noCacheIE);
},
removeScriptTag:function(){
this.headLoc.removeChild(this.scriptObj);
},
addScriptTag:function(){
this.headLoc.appendChild(this.scriptObj);
}
}
function sendRequestServer(params,callback) {
var requestServerUrl="http://localhost:8080/testAjax/TestServlet";
var requestURL=requestServerUrl+"?"+params+"&cbk="+callback;
var jreq = new JSONscriptRequest(requestURL);
jreq.buildScriptTag();
jreq.addScriptTag();
}
?
?
接下来是点击页面上的按钮时需要执行的方法。
?
?
function test(){
var params='method=test';
sendRequestServer(params,'callback');
}
?
以下是回调函数
?
function callback(jsondata){
for(var i=0;i<jsondata.length;i++){
alert(jsondata[i]);
}
}
?
接下来是servlet中代码
?
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
//下面这句具体是干什么的我也不太清楚,呵呵,有知道的希望大家能告我一下
response.setHeader("P3P","CP=\"CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR\"");
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
String method =request.getParameter("method");
String cbk=request.getParameter("cbk");
if("test".equals(method)){
List<String> list= new ArrayList<String>();
list.add("ssss1");
list.add("ssss2");
list.add("ssss3");
//转为json,不习惯用json的,可以拼字符串,用json的话, list里可以放对象,方便js调用
String callback=cbk+"("+MyJSONUtils.toJSONString(list)+");";
//callback 字符串,其实就是拼了一个前台需要执行的js方法
out.print(callback);
}
}
?
在servlet中返回的是json,也可以是字符串,json所需jar包不好找,我已经打包好,上传到? http://xuedong.iteye.com/admin/blogs/1115064,大家可以下载使用,都是经过测试的。以上就是全部代码了,我都测试过可以使用,我一会把项目打包上传上来。呵呵,有什么不合适的,希望大家指出来,大家共同进步,如果用着有问题可以留言问我。呵呵.
?
转载请注明出处,谢谢。http://xuedong.iteye.com/admin/blogs/1134948