Json данные из ajax вызова не могут быть отфильтрованы в триггере onClick - PullRequest
0 голосов
/ 13 июля 2020

Когда моя страница загружается, у меня выполняется вызов ajax. Когда пользователь устанавливает флажок, код просматривает данные json, возвращаемые вызовом ajax, чтобы определить, какие другие параметры показать / скрыть.

Вызов ajax возвращает правильные данные, триггеры onClick работают нормально, но когда я пытаюсь отфильтровать данные json (с помощью filter () или написав свой собственный метод с помощью forEach), это не удается.

С фильтром я получаю пустой массив, независимо от того, как я пишу команду или какие квалификаторы использую. С forEach оператор if (), который я использую для проверки данных, возвращает undefined, независимо от того, как я его пишу (item.RecipeCategoryOptionID == "idIKnowExists" возвращает "undefined").

Если я вставлю отладчик; и запустить в Chrome, я могу поставить точку останова в середине вызова forEach и проверить свой оператор if () в консоли, и я получаю реальное значение (в консоли вызов item.RecipeCategoryOptionID возвращает фактическое значение, not undefined).

Я даже попытался поместить вызов ajax в функцию onClick, просто чтобы заставить ЧТО-ТО сработать (а затем поместить оператор фильтра в функцию успеха). Это тоже не работает.

Как исправить ??

var constraints;

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "@Url.Action("GetConstraints", "RecipeManagement")",
        dataType: "json",
        success: function (data) {
            constraints = data;
        }
    });
});

function CalledOnClick(checkbox) {
    var selectedOptionId = $(checkbox).attr("class");
    var isSelected = $(checkbox)[0].checked;

    ApplyConstraints(selectedOptionId, isSelected);
}

function ApplyConstraints(selectedOptionId, isSelected) {
    var relevantConstraints = constraints.filter(c => { return (c.RecipeCategoryOptionID == selectedOptionId) });

    relevantConstraints.forEach(function (item) {
        $("#isRequired" + item.RecipeCategoryTitleID).val(isSelected ? item.IsRequired : !item.IsRequired);
        $("#isProhibited" + item.RecipeCategoryTitleID).val(isSelected ? item.IsProhibited : !item.IsProhibited);
    });
}

1 Ответ

0 голосов
/ 29 июля 2020

Решено: что-то в C# вызове "return Json (constraints);" преобразовывал первую букву каждого имени свойства (ключа) в нижний регистр.

Итак, item.RecipeCategoryTitleID стал item.recipeCategoryTitleID

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