我有一个看起来像这样的 Ajax 函数
function PersonAtlLawUpdate(personRef) {
var selectionPanel = $('div#SelectionPanel');
var fromdate = selectionPanel.find('input#FromDateTextBox')[0].defaultValue;
var timeSpan = selectionPanel.find('select#TimeSpanDropdownList').data('timespanvalue');
var url = "MonthOverview.aspx/OnePersonAtlLawUpdate";
$.ajax({
url: url,
data: JSON.stringify({ personRef: personRef, fromdate: fromdate, timespan: timeSpan }),
type: "POST",
contentType: "application/json",
dataType: "JSON",
context: document.body,
success: function (atlError) {
changePersonAtlStatusIcon(atlError, personRef);
},
error: function (xhr, status, errorThrown) {
//alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
}
});
}
在一个函数中,我需要像这样运行两次:
PersonAtlLawUpdate($(gMarkedCell).parent("tr").attr("personref"));
PersonAtlLawUpdate(pRef);
可能的问题是在某些情况下不能 100% 工作。dom 不会在其中一个函数中更新。我认为这是因为另一个“覆盖”了它。
那么如何确保第二个“PersonAtlLawUpdate”在第一个完成后运行?推迟它似乎不太好。在 ajax 调用中将 async 设置为 false 是一个很好的解决方案吗?
编辑,像这样尝试并在我的成功中放置了一个 console.log。但是“全部完成”将首先运行:
$.when(PersonAtlLawUpdate($(gMarkedCell).parent("tr").attr("personref")), PersonAtlLawUpdate(pRef)).then(function (){console.log("all complete")});