我正在使用C#和jQuery来构建表单页面,我有多个输入,如果它们已经填充,我想向附加的SQL Server提交一个AJAX调用,如果它们没有填充我想要没做什么。 一旦所有填充的AJAX调用完成,我就想重新加载页面。
现在我有这样的功能:
Func1()
{
if ($'#form1').val().length > 0 {
$.post('https://foo/', {id: id, column: col1, value: $('form1').val())
}
if ($'#form2').val().length > 0 {
$.post('https://foo/', {id: id, column: col1, value: $('form2').val())
}
}
$('#submit').click(function() {
Func1();
window.location.reload(true);
} );
然而,这会导致一些值被更新但不是全部,我知道这与我的异步调用有关。我对异步调用相当新,但通常我会放一个.then(function(){});在他们的最后,他们工作正常,但在这种情况下,它没有解决任何问题。有人能指出我正确的资源方向来解决这个问题吗?我无法嵌套我的AJAX调用,因为有时2会更新,1会不会。
答案 0 :(得分:1)
根据您的要求,您可以通过对代码的轻微重组来实现它:
function form1CallAsync(){
var d = $.Deferred();
if ($'#form1').val().length > 0) {
// Ajax call for Form1 post. Important: In the success callback, have
//d.resolve() in the end, in the error callback, d.reject()
} else { d.resolve(); }
return d.promise();
}
function form2CallAsync(){
var d = $.Deferred();
if ($'#form2').val().length > 0) {
// Ajax call for Form2 post. Important: In the success callback, have
//d.resolve() in the end, in the error callback, d.reject()
} else { d.resolve(); }
return d.promise();
}
$('#submit').click(function() {
$.when(form1CallAsync(), form2CallAsync()).done(
function(a1, a2){
// your code to process the results from both ajax posts
// ..
window.location.reload(true);
}
)
});
答案 1 :(得分:0)
我能想到一个解决方案。可能有更好的解决方案。
1)用false声明两个布尔变量。
2)一旦特定呼叫成功/失败,将每个变量设置为true。
3)将窗口重新加载到文档就绪并相应地重新加载。
$(document).ready(function(){
if (callOne == true && calltwo == true){
window.location.reload(true);
}
}
答案 2 :(得分:0)
看一下优雅的jQuery When
使用上面的代码,可以将代码重写为:
$('#submit').click(function() {
if (($'#form1').val().length > 0 && ($'#form2').val().length > 0) {
$.when($.post(*form1Call*), $.post(*form2Call*)).done(
function(a1, a2){
// your code to process the results from both ajax posts
// ..
window.location.reload(true);
}
)
}
});