1

都市 ID に応じて都市名、州、国などの都市の詳細をロードするフォーム レイアウトがあり、JSON 経由で返されます。

次のように機能します。

public JsonResult GetCityDetails(int city_id)
    {
        var result = "SELECT (CITY_NAME + ', ' + STATE_NAME + ', ' + COUNTRY_NAME) AS CITY_NAME FROM COUNTRY_MASTER cm, STATE_MASTER sm, CITY_MASTER cy where cy.STATE_ID = sm.STATE_ID AND sm.COUNTRY_ID = cm.COUNTRY_ID AND cy.CITY_ID =" + city_id + " ";
        var tempPerson = DatabaseHelper.Instance.Database.QuerySingle(result);
        return Json(new { Data = tempPerson.CITY_NAME });
    }

ここでは、JSON 経由で返される都市の詳細の正しいデータを取得していますが、html フォーム フィールドへの読み込み中に問題が発生します。

ただし、この関数は次のように Java スクリプト関数で呼び出されます。

loadCityDetails: function (_cityid) {
           debugger;
            console.log("loadCityDetails");
            $.ajax({
                url: '@Url.Action("GetCityDetails", "Yogya")' + '?address_id=' + currentAddressID + '&person_id=' + currentPersonID + '&city_id=' +_cityid,
                type: 'POST',
                success: function (data) {
                 alert('Address Selected');                      
                   $("#CITY_DETAIL_AC").val(data.Data);

                }
            });
        },

さて、問題は、alert('Address Selected'); を保持しない場合です。loadCityDetails のコードでは、アラートが提供されている場合にのみ、フォームの都市名フィールドに都市の詳細がロードされていません。しかし、私はこの警告を維持したくありません。では、アラートを表示せずに都市の詳細をロードするにはどうすればよいですか。どんな助けでも大歓迎です。

4

1 に答える 1

0

これは、toの呼び出し$("#CITY_DETAIL_AC").val(data.Data);が、DOM構造とは独立して実行される非同期ajax-callで発生するためです。関数呼び出しが戻るまでにDOMの準備ができているかどうかを知る方法はありません。要素にアクセスできないため、おそらくそうではありません。アラートボックスを表示すると、システムはDOMに書き込もうとする前にDOMを作成する時間ができます。

解決策:次のように、ajax呼び出しを含む関数を.ready()に配置します。

$(document).ready(function(){..your function body here...});

そうすれば、すべての要素が存在する前に発生しないことが保証されます。これで、{... function body ...}内からcity-idを取得する必要があります。これは、引数として渡されることを期待できないためです。

于 2012-09-10T13:24:31.100 に答える