0

私の .js ファイル

        function call() {
            var val1;
            var val2;
            var b2 = new goog.ui.Button();
            b2.decorate(goog.dom.getElement('but'));
            goog.events.listen(b2, goog.ui.Component.EventType.ACTION,
                function(e) {
                val1 = (goog.dom.getElement('liun').value);
                val2 = (goog.dom.getElement('lipw').value);
            var request = new goog.net.XhrIo();
            var res;
            goog.events.listen(request, "complete", function(e){
                var xhr = /** @type {goog.net.XhrIo} */ (e.target);
                res = xhr.getResponseText();
            if(xhr.getResponseText() == "true")
                    {
                goog.dom.getElement("sp1").innerHTML = ("Hi Welcome");
                    }
                    else
                    {
                goog.dom.getElement("sp1").innerHTML = ("Invalid Username or Password");
                    }
                });
            var url = 'mylogin?username='+val1+'&password='+val2;
            request.send(url, "GET");       
            });
        }

私のサーブレット

    public class mylogin extends HttpServlet
    {
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
        {
            String uname = ((req.getParameter("username")).trim());
            String pword = ((req.getParameter("password")).trim());
                resp.setContentType("text/html");  
                PrintWriter out = resp.getWriter();
                System.out.println("" + uname + " " + pword);
                String tof;
                if((uname.equals("arjun"))&&(pword.equals("daglur")))
                {
                    tof = "true";
                }
                else
                {
                    tof = "false";
                }
                System.out.println(tof);
                out.write(tof);
                out.close();

        }
    }

初めて送信をクリックすると、送信されません。2回目は1回の通話です。3 回目は 2 回の呼び出しを行い、4 回目は 3 回の呼び出しを行います。call() は jsp でクリックすると呼び出されます。

4

1 に答える 1

1

「call()」の onclick メソッドを持つボタン「#but」を装飾しています。初めてクリックすると、Googleイベントリスナーがボタンにバインドされます-

goog.events.listen(b2, goog.ui.Component.EventType.ACTION,

「#but」には、「call()」の onclick メソッド (Closure のイベント ハンドラーによってオーバーライドされない) と 1 つのイベント ハンドラーの両方があります。ボタンを 2 回目にクリックすると、イベント ハンドラーと、別のイベント ハンドラーをボタンにバインドする「onclick」メソッドの両方がトリガーされます。(等々)。これが、クリックするたびに呼び出しの量が増える理由です。

ボタンに onclick メソッドを持たせず、代わりに、ページがレンダリングされた後にイベント ハンドラーをボタンにバインドすることをお勧めします。

于 2013-08-30T13:59:05.077 に答える