0
Answered

data.management is undefined

SpectralEye 4 years ago updated 4 years ago 2
Здравствуйте!

При тестировании полей подсказок организаций встретился с такой ошибкой: с ООО всё нормально, а с ИП выдает ошибку TypeError: data.management is undefined.

Я понимаю, что он ругается на то отсутствие указанного объекта, но я не понимаю, почему моя проверка на его существование также не срабатывает.


Код:
<label for="party">Найти организацию: </label><input id="party" name="party" type="text" size="100"/>
<label for="address">Адрес </label><input id="address" name="address">
<label for="name_short">Короткое имя </label><input id="name_short" name="name_short">
<label for="name_full">Полное имя </label><input id="name_full" name="name_full">
<label for="inn">ИНН </label><input id="inn" name="inn">
<label for="kpp">КПП </label><input id="kpp" name="kpp">
<label for="management_name">ФИО руководителя </label><input id="management_name" name="management_name">
<label for="management_post">Должность руководителя </label><input id="management_post" name="management_post">
<label for="name_full_with_opf">Полное наименование с ОПФ </label><input id="name_full_with_opf" name="name_full_with_opf">
<label for="name_short_with_opf">Краткое наименование с ОПФ </label><input id="name_short_with_opf" name="name_short_with_opf">
<label for="ogrn">ОГРН </label><input id="ogrn" name="ogrn">
<label for="okpo">Код ОКПО </label><input id="okpo" name="okpo">
<label for="okved">Код ОКВЭД </label><input id="okved" name="okved">
<label for="opf_code">Код ОКОПФ </label><input id="opf_code" name="opf_code">
<label for="opf_full">Полное название ОПФ </label><input id="opf_full" name="opf_full">
<label for="opf_short">Краткое название ОПФ </label><input id="opf_short" name="opf_short">
<label for="type">Тип организации </label><input id="type" name="type">


<!--[if lt IE 10]>

<![endif]-->

<script type="text/javascript">
jQuery.noConflict();

function join(arr /*, separator */ ) {
    var separator = arguments.length > 1 ? arguments[1] : ", ";
    return arr.filter(function(n) {
        return n
    }).join(separator);
}

function showSuggestion(suggestion) {
    console.log(suggestion);
    var data = suggestion.data;
    if (!data)
        return;

    function alertObj(obj) {
        var str = "";
        for (k in obj) {
            str += k + ": " + obj[k] + "\r\n";
        }
        alert(str);
    }

    if (typeof data.name !== "undefined")
        jQuery("#name_short").val(join([data.opf && data.opf.short || "", data.name.short || data.name.full], " "));

    if (typeof data.inn !== "undefined")
        jQuery("#inn").val(data.inn);

    if (typeof data.kpp !== "undefined")
        jQuery("#kpp").val(data.kpp);

    if (typeof data.address !== "undefined")
        jQuery("#address").val(data.address.value);

    if (typeof data.management.name !== "undefined")
        jQuery("#management_name").val(data.management.name);

    if (typeof data.management.post !== "undefined")
        jQuery("#management_post").val(data.management.post);

    if (typeof data.name.full_with_opf !== "undefined")
        jQuery("#name_full_with_opf").val(data.name.full_with_opf);

    if (typeof data.name.short_with_opf !== "undefined")
        jQuery("#name_short_with_opf").val(data.name.short_with_opf);

    if (typeof data.ogrn !== "undefined")
        jQuery("#ogrn").val(data.ogrn);

    if (typeof data.okpo !== "undefined")
        jQuery("#okpo").val(data.okpo);

    if (typeof data.okved !== "undefined")
        jQuery("#okved").val(data.okved);

    if (typeof data.opf.code !== "undefined")
        jQuery("#opf_code").val(data.opf.code);

    if (typeof data.opf.full !== "undefined")
        jQuery("#opf_full").val(data.opf.full);

    if (typeof data.opf.short !== "undefined")
        jQuery("#opf_short").val(data.opf.short);

    if (typeof data.type !== "undefined")
        jQuery("#type").val(data.type);
}

jQuery("#party").suggestions({
    serviceUrl: "https://dadata.ru/api/v2",
    token: "9baeeea1af04c72ef2fcebe31ee3c8ea5f6d2e72",
    type: "PARTY",
    count: 5,
    /* Вызывается, когда пользователь выбирает одну из подсказок */
    onSelect: showSuggestion
});

</script>

Answer

Answer
Answered
Добрый день. Проблема в том, что вы проверяете поле data.management.name, а не существует «вышестоящее» data.management. Поэтому проверку лучше делать так:
if (data.management && data.management.name) {
    $("#management_name").val(data.management.name);
}
if (data.management && data.management.post) {
    $("#management_post").val(data.management.post);
}
Answer
Answered
Добрый день. Проблема в том, что вы проверяете поле data.management.name, а не существует «вышестоящее» data.management. Поэтому проверку лучше делать так:
if (data.management && data.management.name) {
    $("#management_name").val(data.management.name);
}
if (data.management && data.management.post) {
    $("#management_post").val(data.management.post);
}