このような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);
}
});
}
1 つの関数で、次のように 2 回実行する必要があります。
PersonAtlLawUpdate($(gMarkedCell).parent("tr").attr("personref"));
PersonAtlLawUpdate(pRef);
起こりうる問題は、場合によっては 100% 機能しないことです。関数の 1 つで dom は更新されません。そして、もう一方がそれを「上書き」しているためだと思います。
では、最初の "PersonAtlLawUpdate" が完了した後に 2 番目の "PersonAtlLawUpdate" が実行されるようにするにはどうすればよいでしょうか? 遅らせるのは良くないようです。ajax呼び出しでasyncをfalseに設定するのは良い解決策ですか?
編集して、このように試して、私の成功にconsole.logを配置しました。ただし、「すべて完了」は最初に実行されます。
$.when(PersonAtlLawUpdate($(gMarkedCell).parent("tr").attr("personref")), PersonAtlLawUpdate(pRef)).then(function (){console.log("all complete")});