0

私は ajax と javascript でひどい悪夢に見舞われています... JSON の回答を読んで、他のサイトにリダイレクトしようとしています。

私の Javascript は、プロシージャ == ログイン || を待機している検証サーブレットにクエリを実行することになっています。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");

}

現時点で検証サーブレット:

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秒ごとに投稿を続けてください...)

御時間ありがとうございます、

4

1 に答える 1

4
  1. "{'procedure' : 'login' }" は有効な JSON ではありません。JSONのすべてのキーと文字列は、一重引用符ではなく、二重引用符で囲む必要がありますout.print()したがって、代わりにこれが必要です:
    "{\"procedure\" : \"login\" }"

  2. text/javascriptJSON の間違った MIME タイプです。を使用しapplication/jsonます。

  3. setInterval文字列を(または、さらに言えば)に渡さないでくださいsetTimeout。それevalは変装しており、それが悪であることは誰もが知っています (右?右? )。関数自体を渡すだけです:

    var timeInterval=self.setInterval(check_userId, 3000); // look ma, no quotes
    
于 2013-01-29T03:24:43.033 に答える