我们在做项目的时候会出现访问其他网站的数据,即所谓的跨域访问数据。下面的代码是跨域访问数据的例子
<script type="text/javascript"> /*通过getJSON方法取域数据 var json_att = "http://api.flickr.com/services/feeds/photos_public.gne?tags=car&tagmode=any&format=json&jsoncallback=?"; $.getJSON(json_att,function(data){ $.each(data.items,function(i,item){ $("<img class='para'/>").attr("src",item.media.m).appendTo("#resText"); }) }); */ /**/var ajax_att = "http://api.flickr.com/services/feeds/photos_public.gne" $.ajax({ //type: "GET", //async:'false', contentType: "application/json; charset=utf-8", url: ajax_att, dataType:'jsonp', jsonp:'jsoncallback', data: {"tags":"car","tagmode":"any","format":"json"}, success: function(data){ $.each(data.items,function(i,item){ $("<img class='para'/>").attr("src",item.media.m).appendTo("#resText"); }) } }); </script>
注意后台放回代码的为:
String jsoncallback = Struts2Utils.getRequest().getParameter("jsoncallback");
Struts2Utils.getResponse().setContentType("application/html;charset=UTF-8");
JSONObject jobj = new JSONObject();
String jb = StrUtil.doNull(jsoncallback);
String oi = StrUtil.doNull(objId);
String ot = StrUtil.doNull(objType);
String so = StrUtil.doNull(som).toUpperCase();
if(StrUtil.isEmptyWithTrim(oi)||StrUtil.isEmptyWithTrim(ot)){
jobj.put("flag", "false");
jobj.put("msg", "缺少必要的参数!!");
if(StrUtil.isEmptyWithTrim(jb)){
Struts2Utils.getResponse().getWriter().print(jobj.toString());
}else{
Struts2Utils.getResponse().getWriter().print(jb+"("+jobj.toString()+")");
}
}
关键注意:
String jsoncallback = Struts2Utils.getRequest().getParameter("jsoncallback");
Struts2Utils.getResponse().getWriter().print(jb+"("+jobj.toString()+")");
不在同一个域时iframe的问题
protected String showOkDomain(Object msg)throws IOException{
JSONObject jvo = new JSONObject();
StringBuffer sb = new StringBuffer("<script>document.domain='test.com';</script>");
jvo.put("isok", "T");
jvo.put("msg", msg);
sb.append(jvo);
Struts2Utils.getResponse().setContentType("text/html;charset=UTF-8");
Struts2Utils.getResponse().getWriter().write(sb.toString());
return null;
}