87,777
社区成员




var public_obj; //全局变量
//Ajax从服务器拿数据
function getJsonObj(url_servlet){
var urlStr = "http://192.168.1.109:8080/test8/servlet/" + url_servlet + "?callback=?";
// 调用jQuery提供的Ajax方法
$.ajax({
type : "POST",
async : false, //(默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
url : urlStr,
data : "{}",
dataType : "jsonp",
success : function(msg) {
public_obj = eval(msg); //调用Json2.js中提供的JSON解析器来解析成JSONObject
console.log("1" + public_obj); //这里可以查到public_obj的值
},
error : function(XMLHttpRequest,textStatus,errorThrown){
alert(errorThrown);
alert(XMLHttpRequest.status);//200
alert(XMLHttpRequest.readyState);//4
alert(textStatus);//pasererror
}
});
//while (!public_obj){};
console.log("2" + public_obj); //但是这里public_obj的值就是undefined了
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/x-json");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String userjsonString;
PrintWriter out = response.getWriter();
userjsonString = JsonTools.createJsonString("publicinfo",
JsonService.getPublicInfo(TPublicinfoAction.getPublicinfo()));
String callback = request.getParameter("callback");
out.println(callback + "(" + userjsonString + ")");
//System.out.println("JSON:" + userjsonString);
System.out.println(callback);
out.flush();
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("application/javascript");
response.setCharacterEncoding("utf-8");
/**
* 1.没有v,忽略版本控制机制
* 2. 有v:比较cookie中的dcmv,一致忽略,不一样重新缓存
*/
long d=System.currentTimeMillis();
response.setDateHeader("Last-Modified",d);
response.setDateHeader("Expires", d + 24*60*60*1000);
response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "Pragma");
int uid=0;
try{
uid=Integer.parseInt(request.getParameter("uid"));
}catch(NullPointerException | NumberFormatException e){
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);//304
return;
}
ChannelService cs=new ChannelServiceImple();
List<ChannelBean> channels=cs.asynLoadSubscribeChannel(uid);
if(channels.size()==0){
channels.add(new ChannelBean("历史上今天",0));
}
Gson gson=new Gson();
//回调函数
String callbackFuntion=request.getParameter("callback");
PrintWriter pw=response.getWriter();
pw.print(callbackFuntion+"("+gson.toJson(channels)+");");
pw.flush();
pw.close();
}
我希望服务器返回一个可以缓存的结果集
版本一,无法缓存
$.getJSON("/channel/loading?uid="+uid+"&v="+v+"&callback=?", function(data){
_loadSubscribeChannel(data);
});
版本二,可以缓存
$.ajax({type:'GET',
url:'/channel/loading?uid='+uid+'&v='+v,
jsonpCallback:'jsonCallback',
contentType:'application/json',
cache:'true',
dataType:'jsonp',
success:function(data){
_loadSubscribeChannel(data);
}
});
我所说的缓存的是指浏览器缓存.避免每次都去服务器get,缓存成功后,再次get时会返回304response.setContentType("application/javascript");
3.都没有数据到服务器你干么用POST