在我看来,我需要做一些额外的表格验证"用我的后端(用$ http调用)。要中止或触发表单发送,我需要等待$ http返回的承诺完成。
$('#myForm').submit(function() {
...
$http(...).success(function(data) {
if (data.condition){
//send the form by returning true
return true;
} else {
//stay on this page by returning false
return false;
});
//what should I return here ??
}
一般来说,我们如何等待/阻止承诺完成,例如$ http()函数返回的承诺?
答案 0 :(得分:2)
通常,答案是应该返回通过$http
创建的承诺。但是,对于eventHandlers,您可以明确地调用preventDefault()
然后submit()
。
var form = $('#myForm');
form.submit(function(e) {
e.preventDefault(); // prevent submit
$http(...).success(function(data) {
if (data.condition){
//send the form by explicit submit
form.submit();
}
});
}
请注意,在没有jQuery的新浏览器中进行非常小的修改也可以。
另一方面,良好的角度实践阻止了这种事情 - 你应该将表示逻辑放在指令中,而不是像这样直接调用DOM方法。演讲"没有决定"关于页面的命运。它通过ng-click
委托给范围方法。
答案 1 :(得分:2)
Promise不会使您的代码同步。 AJAX仍然是异步的。您需要异步处理代码。
验证您的代码,就像使用经典的AJAX代码验证一样。