function testCross() {
$.ajax({
//这个是申请方式是get而不是post是因为跨域访问是不支持post的方式的在jquery中(网上都这么写的)
type : "get",
//返回格式是json的形式
dataType : "json",
//这个是一个传参的形式,主要是为了后台能获得参数(记住这里很重要哦)
data : "callback=?",
//请求的路径
url : "http://localhost:8080/cms/testCross.jspx",
//成功处理的函数
success : function(json) {
//返回处理的函数(在这里是进行alert的tosource能够让各位看到返回的数据格式)
alert(json.toSource())
},
//显示错误的信息
error : function(XMLHttpRequest, textStatus, errorThrown) {
alert(arguments[1]);
alert(arguments[2]);
alert(arguments.toSource());
//这个大家上网搜索可以参考下面的一篇文章
alert(XMLHttpRequest.readyState);
}
});
}
各位大家好,最近做了个jquery的页面需要ajax调用但是 客户说需要将我的html放到他们的 服务器上,同时我的后台怎么才能不给客户呢?这里就用到了jquery的ajax的跨域访问问题。
在网上我发现了域名,端口号不同 就能导致跨域访问的问题了所以我就直接启动了两个tomcat 一个跑着jquery的页面,一个跑着java的后台就OK 了不多说了直接上代码吧。
jquery 方面的代码
spring mvc 控制层代码
/**
* 进行测试的接口
* @param request
* @param response
* @param model
* @throws IOException
*/
@SuppressWarnings("unchecked")
@RequestMapping(value = "testCross.jspx" , method = RequestMethod.GET)
@ResponseBody
public void getUserInfo12(HttpServletRequest request,HttpServletResponse response, ModelMap model) throws 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");
/**
* 获得jquery的callback的方法的名称
*/
String callback = request.getParameter("callback");
PrintWriter out = response.getWriter();
/*
* 返回使用的集合
*/
Map<String, String> rs = new HashMap<String, String>();
List<Recored> list = recoredManager.findLastRecoredList();
List<RecoredVo> voList =recoredManager.setRecoredVoList(list);
JSONArray jsonArray = JSONArray.fromObject(voList);
String temp = jsonArray.toString();
rs.put(callback, "("+temp.toString()+")");
out.write(callback+"("+temp.toString()+")");
}
针对上面的java代码我也要做点解释呢~~~~~
1为什么我要用最古老最二逼得out.write形式来进行显示输出而不使用string、Map
这个原因是因为我在使用string map之后发现都不能返回到页面中,这点就很奇怪了,后来想想可能是因为不在用同一个web工程导致的数据安全性问题吧(自己猜测的希望大家在下面果断回帖给我正确答案)
2返回的string问什么要拼成callback+"("+temp.toString()+")"
这个原因是因为callback我在jquery中传入的是callback=?那么我就在spring mvc中获得了 callback=Jqueryxxxxxxxx的一个字符串,这个字符串是jquery和控制层的一个特定的制定码,所以必须这么写才能回调success的js的函数
3格式化输出格式是需要一些麻烦的格式转码么
恩这个是的,而且如果是有数据录入进行参数传入的换都得做类似这么个样子的转码呢username = new String(username.getBytes("ISO-8859-1"),"utf-8");
---------------------------------分割线下面是上面的jquery一场处理的一些资料-----------------------------------------------
readyState 返回当前请求的状态,只读.
-
(0)未初始化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法进行未初始化作好准备。值为0表示对象已经存在,否则浏览器会报错--对象不存在。
(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。
概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:
创建-初始化请求-发送请求-接收数据-解析数据-完成
在具体应用中,明确了readyState的五个状态(XMLHttpRequest对象的生命周期各个阶段)的含义。
剩下的 就还需要大家帮帮我想想了 谢谢啦 哈哈