0

ここで実際に何が起こっているかについて間違っているかもしれませんが、3つのHtml.dropdownlistがあります。そして、実際に機能するフィルタリングを処理するためにjqueryを使用しています。ただし、次の関数が呼び出される前にデータの読み込みが完了していないため、奇妙な動作が発生する可能性があります。

例えば:

いくつかの背景。会社:複数のフィールドオフィスを所有しているフィールドオフィス:いくつかの施設を所有しているしたがって、論理的には、会社を変更すると、フィールドオフィスが変更され、次に施設が変更されます。

$(function () {
        $(document).ready(function () {
            var cid = $("#CompanyId").val();
            $.post("/ManifestSearch/GetFilteredFieldOffices", { id: cid }, function (data) {
                $("#FieldOfficeId").loadSelect(data);
            });
            var fid = $("#FieldOfficeId").val();
            $.post("/ManifestSearch/GetFilteredFacilities", { id: fid }, function (data) {
                $("#FacilityId").loadSelect(data);
            });
        });
    });

これで、ページが読み込まれると、すべてが正常に表示されます。すべてのドロップダウンリストには正しいデータがあります。

会社を変えると、これが呼ばれます。

$(function () {
        $('#CompanyId').change(function () {
            var cid = $(this).val();
            $.post("/ManifestSearch/GetFilteredFieldOffices", { id: cid }, function (data) {
                $("#FieldOfficeId").loadSelect(data);
            });
            var fid = $("#FieldOfficeId").val();
            $.post("/ManifestSearch/GetFilteredFacilities", { id: fid }, function (data) {
                $("#FacilityId").loadSelect(data);
            });
        });
    });

これにより、フィールドオフィスは正しいリストに変更されますが、会社の変更が発生する前に設定されていたフィールドオフィスに施設が変更されます。私はjqueryについて十分に知らないので、何が起こっているのかを正確に把握できませんが、私の本能は、2つの投稿が同時に発生し、2番目の投稿が最初の投稿が終了する前に発生することを教えてくれます。

4

1 に答える 1

2

これは非同期リクエストの性質です.どの順序で終了するかわからないため、最初のデータからのデータが2番目のデータで利用できると常に想定できるとは限りません。

理想的には、2 番目のリクエストは最初のリクエストの onSuccess コールバック関数内にあり、発生した問題を処理する onFailure/onError 関数ハンドラーを使用する必要があります。

于 2010-10-25T19:55:56.247 に答える