【发布时间】:2018-09-16 00:20:19
【问题描述】:
我有一个通用的 MVC aspnetcore 设置,它从本地数据库中提取数据,该数据库中包含所有美国邮政编码、与之相关的州和城市。在输入 3 位数字表示他们应该推断的状态,然后在 5 位数字放入文本框中后填写缺失的城市后,我试图撤回建议。 令我困惑的问题是,在 javascript 函数数据中有返回的信息。但是一旦作用域离开函数并且尝试将另一个文本框的值设置为任何该信息失败,该信息就会丢失。
我的看法
@section Scripts{
<script src="Scripts/jquery-1.5.min.js" type="text/javascript"></script>
<script src="~/js/data.js" type="text/javascript"></script>
}
<div class="form-group">
<label asp-for="Zip" class="col-xs-2 control-label"></label>
<div class="col-xs-6">
<input id="Zip" asp-for="Zip" class="form-control" onkeyup="loadData()"/>
<span asp-validation-for="Zip" class="text-danger" />
</div>
</div>
我的 javascript 文件
function loadData() {
var str = $("#Zip").val();
if (str.length == 3){
$.get("/Localities/OnChange", { id: str }, function (data) {
$("#Code").val(data.code);
});
}
if (str.length == 5) {
$.get("/Localities/OnChange", { id: str }, function (data) {
$("#Boroughs").val(data.boroughs);
$("#City").val(data.city);
$("#Code").val(data.code);
$("#Country").val(data.country);
$("#County").val(data.county);
var temp = data.city;
});
}
}
我的控制器
[HttpGet]
public Localities OnChange(string id)
{
Localities temp = _context.Localities.FirstOrDefault(x => x.Zip.StartsWith(id));
var temp2 = JsonConvert.SerializeObject(temp);
return temp;
}
【问题讨论】:
-
..因为
data是传递给您的$.get回调函数的参数,因此它的范围在该函数内。如果您希望将其范围限定在其他地方,则必须将其推送到其他地方,例如全局变量或其他一些指定用于存储/引用这种性质的事物的命名空间变量。 -
了解要点的超级基本示例:
window.data = data;这会将其推送到同名的全局(窗口)范围变量。不过,这通常是不好的做法。最好将其推送到某个数据处理层。 -
我相信我尝试将它传递给 loadData 函数中的一个变量,但它不会这样做,就像它没有设置任何文本框值一样;因此,即使我没有尝试在视图中创建更全局的值,也不知道这将如何产生不同的结果。
-
我知道适当的包装器很容易破坏代码。至于理解 ajax(不完全),但我的主要问题可能是为什么在它离开 .get 后发送了响应,而数据最终确实被返回了,我该如何像我试图做的那样最终填充信息。跨度>