我正在做一个玩具程序,要求用户输入"用户名"和"全名"在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请求?感谢
答案 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);