Отсутствует понимание в функции Javascript - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть общая настройка 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;
    }

This shows I can get data back from DB

1 Ответ

0 голосов
/ 16 сентября 2018

Здесь есть несколько потенциальных проблем:

1) В этом коде здесь:

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;
        });
    }
}

var temp во втором GET будет доступно только в текущей функции.

Второе, что наиболее вероятно, почему ваш код не показывает данные, потому что это, скорее всего,

data.data.city и data.data.code и т. Д.

если вы делаете console.log(data); Я почти уверен, что он вложен в другую оболочку данных.

Дайте мне знать Я бы изменил переменную функции на функцию (ответ), чтобы вы были озадачены уровнем, на котором вы находитесь.

Это должно сработать или, по крайней мере, дать вам лучшее представление о том, что сломано:

var temp; // Global

function loadData() {
         var str = $("#Zip").val();
         if (str.length == 3){
            $.get("/Localities/OnChange", { id: str }, function (response) {
                $("#Code").val(response.data.code);
            });
        }
        if (str.length == 5) {
            $.get("/Localities/OnChange", { id: str }, function (response) {
                $("#Boroughs").val(response.data.boroughs);
                $("#City").val(response.data.city);
                $("#Code").val(response.data.code);
                $("#Country").val(response.data.country);
                $("#County").val(response.data.county);
                temp = response.data.city;
            });
        }
    }

Также проверьте консоль на наличие любых других ошибок, которые могут препятствовать выполнению кода.

ПРОВЕРЬТЕ ЭТО:

Щелкните правой кнопкой мыши элемент и захватите ID

<input type="text" id="#city">

этот идентификатор может отличаться от ожидаемого после рендера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...