场景如下,我有一个新的屏幕,它只是一个复选框和2个字段,当用户接受拥有新功能时,这些字段是可选的。请求调用这两个字段已经在其他屏幕上单独存在,它们更新表并对给定的输入进行验证。
我在下面的当前版本是尝试让它工作的一点点黑客。我遇到的主要问题是,如果一个或两个字段请求返回验证错误,那么我不希望RegisterUserForNewFunction运行,因为它将重定向到新页面。我猜是因为他们是异步的if if statment试图在他们完成之前执行。该应用程序也是用playframework编写的,如果有帮助的话,我是两个新手,所以我确定可能有些东西我忽略了。
<script type="text/javascript" charset="utf-8">
$('#Update').click(function() {
hide_error();
var field1processed;
var field2processed;
if($('#checkbox').prop("checked") == true){
addField1();
addField2();
if(field1processed == true && field2processed == true){
RegisterUserForNewFunction();
}
}
else {
prompt_reminder('checkbox must be clicked to proceed.');
}
function addField1(){
if($('#form-field1').val() != ''){
$.ajax({
url: '@{request.updatefield1()}',
data: { field: $('#form-field1').val() },
success: function(data, textStatus, jqXHR) {
display_status('Successfull', 'field1 added.', function(){
field1processed = true;
});
},
error: function(response, status, errorThrown) {
function_error(response);
},
type: "POST"
});
} else {
field1processed = true;
}
}
function addField2(){
if($('#form-field2').val() != ''){
$.ajax({
url: '@{request.updateForfield2()}',
data: { field: $('#form-field2').val() },
success: function(data, textStatus, jqXHR) {
display_status('Successfull', 'Field2 added.', function(){
field2processed = true;
});
},
error: function(response, status, errorThrown) {
function_error(response);
},
type: "POST"
});
}else {
field2processed = true;
}
}
function RegisterUserForNewFunction(){
$.ajax({
url: '@{request.newFunction.create(user)}',
success: function(data, textStatus, jqXHR) {
display_status('Successfull', 'registeredUserforNewFunction', function(){
location.href='@{web.redirect.listPage(user)}';
})
},
error: function(response, status, errorThrown) {
function_error(response);
},
type: "POST"
});
}
});