【问题标题】:Javascript - Handling redirect Json responseJavascript - 处理重定向 Json 响应
【发布时间】:2015-07-06 11:00:55
【问题描述】:

我有一个我正在工作的应用程序的小型登录表单,并且我有一个 ajax 请求到一个重定向到新页面的 servlet(登录成功后)。

所以基本上这是理论上可行的 Java 类中的代码。

根据 JAVA CLASS 的要求包含的代码:

PrintWriter out = response.getWriter();
response.sendRedirect("http://stackoverflow.com/");
try {
out.println(response);
out.flush();
} finally {
out.close();
}}

这是 javacript 代码,它是按下登录按钮时调用的函数的一部分

根据要求为 JAVASCRIPT 包含的代码:

var prmVlr = {};    
prmVlr["op"] = '2';
prmVlr["userLogin"]=userName;
prmVlr["passLogin"]=hash;
prmVlr["country"]=country;
prmVlr["database"]="CRM";
$j.ajax({type: "GET", url: "LoginHandler",
data:prmVlr,traditional:true,dataType: "json",   cache:false}).done(function(response){
var data=response;
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
})
.fail(function(){showMsgAlert('Error'+' - PP-E1003');}); }

这个想法是,当我在应用程序中开发下一页时,用户将被重定向到该页面。 这也是我第一次使用这个,所以我不确定我是否正确地做这件事。我可以在字符串 json 中返回 URL,然后重定向,但我不确定这是否会打乱会话。 另外,如果我不够明确,或者我在这里违反了一些规则,我很抱歉我是这个网站的新手,英语不是我的主要语言。

解决方案 1: 所以我想出了一个解决方案,它可能不是最好的,但它确实有效。

在 SERVLET 方面:

System.out.println(login.getSession_id());
StringBuilder jsonStr = new StringBuilder();
jsonStr.append("{'redirect':'" +          (request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"MYPAGELOCATION") +"'}");
jsonResponse = jsonStr.toString().replaceAll("'",
                                Character.toString((char) 34));

在 JAVASCRIPT 方面:

$j.ajax({type: "GET", url: "LoginHandler",     data:prmVlr,traditional:true,dataType: "json",   cache:false}).done(function(response){
window.location.href = response.redirect;
     }

我不知道在这之后 Session 会发生什么,因为我仍在编写课程代码。我不知道为什么响应不起作用,可能是因为我的登录表单调用了一个 javascript 函数,该函数对密码进行了编码,然后在 SERVLET 端请求了登录函数。

【问题讨论】:

  • 请在问题中包含代码。这些图像将来可能会从 postimg.org 中删除,这个问题将毫无用处。谢谢!
  • 我删除了图片并添加了代码,谢谢
  • 通常您会发出 POST 并让服务器端执行重定向。 en.wikipedia.org/wiki/Post/Redirect/Get.
  • 谢谢,我已将表单更改为发布并更改了响应类型。现在我可以通过使用 firefox 检查元素来查看 url,我得到类似“GET XHR http:localhost:8080/thepage”的内容,他找到了它,但仍然没有将我从当前页面重定向到新页面

标签: javascript java json redirect


【解决方案1】:

所以我已经测试了 SOLUTION1,它在应用程序的会话或功能方面完全没有问题。

这就是现在的样子:

Javascript

$j.ajax({type: "GET", url: "LoginHandler",   data:prmVlr,traditional:true,dataType: "json",  cache:false}).done(function(response){
if(response.valido=="1"){ //send 1 if login is valid
     window.location.href = response.redirect;
}
else {
    alert("ERRO NO LOGIN");

}
})
.fail(function(){showMsgAlert('Error'+' - PP-E1003');}); 
}

Java Servlet:

String valido="0";
try {

if (allowUser(userName, passWord,login.getDbUsr())) {
session = request.getSession();
valido="1";
session.setAttribute("logon.isDone", userName);
if ((UsersRegistados.getUsers().containsKey(
request.getRequestedSessionId()) ||   UsersRegistados.getUsers().containsValue(userName))) {
System.out.println("user already registered");
                            }
                        else{
                        UsersRegistados.setUsers(session.getId(), userName);
                        login.setFile(DB.toLowerCase()+"pp"); //crmpp file
                        login.setUcode(userCode); // ep_code
                        login.setUsername(userName); //epName
                        login.setUserType(userType);
                        login.setIdiom(language); 
                        login.setPassword(passWord);
                        login.setSession_id(session.getId());
                         //Try redirecting the client to the page he first tried to access
                         session.setAttribute("login", login); 
                         session.setAttribute("language", language.toUpperCase());
                        }
                   //response.sendRedirect(request.getRequestURI().substring(0,request.getRequestU    RI().indexOf('/', 1))+"/Calendar/calendar.jsp");
//response.setStatus(response.SC_MOVED_TEMPORARILY);
//response.setHeader("Location",  "Calendar/calendar.jsp");
//System.out.println(jsonResponse);
                    }


                    System.out.println(login.getSession_id());
                    StringBuilder jsonStr = new StringBuilder();
                    jsonStr.append("{'redirect':'" + (request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"/Calendar/calendar.jsp") +"','valido':'"+valido+"'}");
                    jsonResponse = jsonStr.toString().replaceAll("'",
                            Character.toString((char) 34));
                    try {
                        out.println(jsonResponse);
                        out.flush();
                    } finally {
                        out.close();                    
 //response.sendRedirect(request.getRequestURI().substring(0,request.getRequestURI().indexOf('/', 1))+"/Calendar/calendar.jsp");
//return;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-15
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多