跨域访问
需求:静态的html访问另外一个域名 取数据。
用到的jquery的getJSON方法:$.getJSON(url,params,function(){数据处理})。其中url="域名/actionName?jsonpcallback=?";
后面这个?jquery会在执行的时候自动生成一个随机数。
后台action
1、属性jsonpcallback 要有get、set方法 (这里属性值域url中的jsonpcallback要一致)
2、action类实现ServletResponseAware接口
3、输出 out.println(this.jsonpcallback + "(" + str + ")") ;其中str要是json的形式
注意:服务端得到callback的数值后,要用jsonp1236827957501(......)把将要输出的json内容包括起来,此时,服务器生成 json 数据才能被客户端正确接收。
4、struts配置文件<action name="getSortJson" class="ClassAction" method="getSortJson"></action>
public class ClassAction extends ActionSupport implements ServletResponseAware{
/**
* 这里我指定了放回的类型 "text/json" 也可以是xml等其他类型
* 用response直接将数据打回到跨域页面的 ajax 的请求里面去
*/
public void printToJson(String str) throws IOException{
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json");
response.setDateHeader("Expires", 0);
PrintWriter out = response.getWriter();
out.println(this.jsonpcallback + "(" + str + ")");
out.flush();
out.close();
}
}
浙公网安备 33010602011771号