为什么Response和JSON选项卡在firebug中有所不同

时间:2011-01-28 08:34:57

标签: java ajax json servlets gson

我的Servlet


public class JSONServlet extends HttpServlet {
private static Gson gson = new Gson();
public void doPost (HttpServletRequest req, HttpServletResponse res)  throws ServletException, IOException
   {
      res.setContentType("application/json");
      res.getWriter().write(gson.toJson(returnVal));
   }
}

我的登录功能


login.login=function(parm0){
$.post(login.url,
   {
     operation:'login',
     userID: 'admin',
     parmData0: JSON.stringify(parm0),
     parmType0: 'com.company.share.svc.login.data.LoginData'
   },
   function(data){
    loginHandler(data);
   },
   'json');
} 

我如何调用我的登录功能
login.login({userID: 'admin', password: 'admin', forceOut: true});

这是firebug Response选项卡

的结果

{"adminUserKey":{"userID":"admin"},"resultCode":0,"sessionID":3788474425691603010,"accountInfoData":[],"userID":"admin","successful":true}

这是导致firebug中的JSON选项卡

的结果

accountInfoData []
adminUserKey    Object { userID="admin"}
resultCode  0
sessionID 3788474425691603000
successful  true
userID   "admin"

如您所见,两个标签中的sessionID不同。在每个login.login(...)方法调用中,我都会获得一个新的会话ID。


function(data){
   //But in callback method
   //data.sessionID is always 3788474425691603000
   //and never changes.
   //But sessionID in firebug Response tab changes
   //ever login.login(...) call and it is true one
}

我做错了什么。为什么我总是得到相同的sessionID。

1 个答案:

答案 0 :(得分:0)

JavaScript在内部使用双打(64位浮点数)来表示数值,因此大数字的精度有限,并且会发生舍入。我用AJAX / JSON-stuff解决了这个问题,解决方案是将session-id作为字符串而不是数字发送(“sessionID”:3788474425691603010 vs.“sessionID”:“3788474425691603010”)