0
$('#loginForm').submit(function(e){

        var $inputs = $(this).find("input");
        var serializedData = $(this).serialize();   
        $inputs.prop("disabled", true);

        var request = $.ajax({
            url: "myurl",
            dataType: "json",
            type: "GET",
            data: serializedData,
        });

        request.done(function (response, textStatus, jqXHR){
            $('#loginMessage').text('GOOD');
        });

        request.fail(function (jqXHR, textStatus, errorThrown){
            $('#loginMessage').text('Some error occured. Please try again');
            console.error("The following error occured: ",errorThrown,jqXHR);
        });

        request.always(function () {
            $inputs.prop("disabled", false);
        });
        // prevent default posting of form
        e.preventDefault();         
    });

私はjqueryを初めて使用し、上記のコードでは.doneブロックが実行されておらず、firebugコンソールにこのメッセージが表示されます:-

GET myurl?userID=aman&password=aman200 OK 37ms jquery .... min.js(2行目)

次のエラーが発生しました:(空の文字列)Object { readyState=0, status=0, statusText="error"}

サーバーサイドスクリプト

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("userID");
        String password = request.getParameter("password");
        System.out.println("GET");
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        Gson gson = new Gson();
        if(username.equals("aman") && password.equals("aman")){
            out.println(gson.toJson(new Boolean("true")));
        }else{
            out.println(gson.toJson(new Boolean("false"))); 
        }
        out.close();
    }
4

3 に答える 3

5

問題は、完全なJSONを送信していないことである可能性があります。結果を出力します

out.println(gson.toJson(new Boolean("true")));

そして、あなたが得るのは真実という言葉だけです。このようなものに変更してみてください。

HashMap<String, Boolean> hm = new HashMap<String, Boolean>();
hm.put("success", true);
out.write(gson.toJson(hm));

有効なJSONである{"success":true}を取得したことを実行します。

于 2013-02-10T09:05:00.967 に答える
2

代わりに fail が呼び出されるため、おそらく done は呼び出されません。http 要求自体は機能しているように見えるため、別の問題として、適切な json コンテンツが返されなかった可能性がありますが、応答はそのように解釈されます (dataType: "json" のため)。

そのため、サーバーが返すコンテンツについて調査する必要があります。

于 2013-02-10T08:44:00.787 に答える
0

理由はわかりませんが、firebug ブレークポイントが request.done() 内のコードが実行されていないという印象を与えることがあります。単にコンソールにチャネリングされているだけかもしれません。

firebug でブレークポイントを使用せずにコードをテストしてみてください。

于 2013-07-16T08:19:05.657 に答える