我有表单布局,我正在加载城市名称,州等城市详细信息 和国家/地区取决于城市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中的代码,我没有将城市详细信息加载到城市名称字段中,只有在提供警报时才会出现。但我不想保持警惕。那么,如何在不显示警报的情况下加载城市细节。任何帮助将不胜感激。
答案 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,因为你不能指望它作为参数传入。