我正在使用ajax和javascript进行可怕的噩梦...我正在尝试阅读JSON答案并重定向到其他网站。
我的Javascript应该查询等待procedure == login ||的验证servlet loginAlreadyInUse然后将其重定向到其他地方:
<script type="text/javascript">
var userId = "<%=request.getSession().getId()%>";
var timeInterval=self.setInterval("check_userId()", 3000);
function check_userId() {
$.post('http://localhost:8080/qrlogin/verify', {userId: userId},
function(data) {
if(data.procedure == "login") {
window.location = 'http://localhost:8080/qrlogin/login'+userId;
}
else if(data.procedure == 'loginAlreadyInUse') {
window.location = 'http://localhost:8080/qrlogin/'+userId;
}
}, "json");
}
此刻验证servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/javascript");
PrintWriter out = response.getWriter();
// Assuming your json object is **jsonObject**, perform the following, it will return your json object
out.print("{'procedure' : 'login' }");
out.flush();
return;
}
问题是脚本永远不会重定向到登录页面。 (继续每3秒发一次......)
谢谢你的时间,答案 0 :(得分:4)
"{'procedure' : 'login' }"
is not valid JSON。 JSON must be double-quoted,中的所有键和字符串都不是单引号。所以你需要out.print()
代替这一点:
"{\"procedure\" : \"login\" }"
text/javascript
is the wrong MIME type for JSON. Use application/json
.
不要将字符串传递给setInterval
(或setTimeout
,就此而言)。这是伪装的eval
,我们都知道这是邪恶的(对吗? 对吗? )。只需传递函数本身:
var timeInterval=self.setInterval(check_userId, 3000); // look ma, no quotes