将数据加载到使用JSON返回的表单字段时发出问题

时间:2012-09-10 07:06:05

标签: javascript jquery ajax

我有表单布局,我正在加载城市名称,州等城市详细信息  和国家/地区取决于城市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);

                }
            });
        },

现在,问题是如果我不保持警报('地址选择');在loadCityDetails中的代码,我没有将城市详细信息加载到城市名称字段中,只有在提供警报时才会出现。但我不想保持警惕。那么,如何在不显示警报的情况下加载城市细节。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是因为对$("#CITY_DETAIL_AC").val(data.Data);的调用发生在异步ajax调用中,该调用独立于DOM构造运行。在函数调用返回时,您无法知道DOM是否已准备好 - 它可能不是,因为您无法访问该元素。显示alert-box为系统提供了在尝试写入DOM之前创建DOM的时间。

解决方案: 将包含ajax调用的函数放在.ready()中,如下所示:

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

然后保证在所有元素出现之前不会发生。现在你必须从{...函数体...}中检索city-id,因为你不能指望它作为参数传入。