ajax跨越请求

本文介绍了一种通过动态生成script标签并利用jsp/servlet输出可执行js方法来解决Ajax跨域问题的技术实现。详细阐述了从jsp页面、js方法封装、servlet响应到最终的回调函数的完整流程,并提供了测试验证可用的代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在机器人技术中,轨迹规划是实现机器人从一个位置平稳高效移动到另一个位置的核心环节。本资源提供了一套基于 MATLAB 的机器人轨迹规划程序,涵盖了关节空间和笛卡尔空间两种规划方式。MATLAB 是一种强大的数值计与可视化工具,凭借其灵活易用的特点,常被用于机器人控制法的开发与仿真。 关节空间轨迹规划主要关注机器人各关节角度的变化,生成从初始配置到目标配置的连续路径。其关键知识点包括: 关节变量:指机器人各关节的旋转角度或伸缩长度。 运动学逆解:通过数学方法从末端执行器的目标位置反推关节变量。 路径平滑:确保关节变量轨迹连续且无抖动,常用方法有 S 型曲线拟合、多项式插值等。 速度和加速度限制:考虑关节的实际物理限制,确保轨迹在允许的动态范围内。 碰撞避免:在规划过程中避免关节与其他物体发生碰撞。 笛卡尔空间轨迹规划直接处理机器人末端执行器在工作空间中的位置和姿态变化,涉及以下内容: 工作空间:机器人可到达的所有三维空间点的集合。 路径规划:在工作空间中找到一条从起点到终点的无碰撞路径。 障碍物表示:采用二维或三维网格、Voronoi 图、Octree 等数据结构表示工作空间中的障碍物。 轨迹生成:通过样条曲线、直线插值等方法生成平滑路径。 实时更新:在规划过程中实时检测并避开新出现的障碍物。 在 MATLAB 中实现上述规划方法,可以借助其内置函数和工具箱: 优化工具箱:用于解决运动学逆解和路径规划中的优化问题。 Simulink:可视化建模环境,适合构建和仿真复杂的控制系统。 ODE 求解器:如 ode45,用于求解机器人动力学方程和轨迹执行过程中的运动学问题。 在实际应用中,通常会结合关节空间和笛卡尔空间的规划方法。先在关节空间生成平滑轨迹,再通过运动学正解将关节轨迹转换为笛卡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值