用JSON对象响应AJAX请求?

时间:2014-06-04 06:43:30

标签: java json ajax spark-java

我正在做一个玩具程序,要求用户输入"用户名"和"全名"在html表单上,表单将由AJAX提交给Spark框架中的以下方法(参见here for Spark

post("/admin/user/signup", "application/json", (request, response) -> {
            String username = request.queryParams("username");
            String fullname = request.queryParams("fullname");
            System.out.println("username is: " + username +", full name is: " + fullname);
            Map<String, Object> registerResults = new HashMap<String, Object>();
            registerResults.put("success", "successfully registered " + username);
            return new MyMessage("successful registration!");
        }, new JsonTransformer());

以下是我的AJAX代码,据说提交并接收上述post()方法的响应:

<script>
        $(document).ready(function() {
            $('#registerForm').submit(function() {
                var formData = $('#registerForm').serialize();    /* capture the form data*/
                $.getJSON('/admin/user/signup', formData, registerResults);
           //     $.post('/admin/user/signup', formData, registerResults);   /* get JSON back from the post method */
            });
            function registerResults(data) {
                    $('#registerForm').fadeOut();
                    $('.starter-template').html(data.message);
                }  // end of registerResults
        });  // end of ready
        </script>

但是,AJAX代码无法接收JSON对象,而是简单地在网页/ admin / user / signup上打印JSON对象:

{"message":"successful registration!"}

所以我要求帮助如何在Spark中将JSON对象返回给AJAX请求?感谢

3 个答案:

答案 0 :(得分:2)

您确实意识到您正在提交表单。因此,不是假定的AJAX调用,而是提交表单,因此生成页面......

所以你应该通过简单地添加

来停止表单提交传播
event.preventDefault();

return false;在提交处理程序的末尾。

在表单提交处理程序中。

<script>
        $(document).ready(function() {
            $('#registerForm').submit(function(event) {
            event.preventDefault();
                var formData = $('#registerForm').serialize();    /* capture the form data*/
                $.getJSON('/admin/user/signup', formData, registerResults);
           //     $.post('/admin/user/signup', formData, registerResults);   /* get JSON back from the post method */
            });
            function registerResults(data) {
                    $('#registerForm').fadeOut();
                    $('.starter-template').html(data.message);
                }  // end of registerResults
        });  // end of ready
        </script>

答案 1 :(得分:0)

而不是return new MyMessage("successful registration!");

就像这样return new MyMessage(registerResults);

现在,您没有返回此registerResults地图值 我希望你正在使用play framework.then它应该工作

还有一件事,你应该拒绝提交表格。所以,使用

 $('#registerForm').submit(function(e) {
            e.preventDefault();
// do your stuff here

});

答案 2 :(得分:-1)

你不能通过使用html()函数将json视为HTML,你需要通过jQuery中的parseJson()函数解析它:http://api.jquery.com/jquery.parsejson/

var obj = jQuery.parseJSON(data);
$('.starter-template').html(obj.message);