Задать вопрос
@Pkirillw

Почему выводится NaN в HTML код?

Столкнулся с проблемой вывода информации в HTML код, через JS.
Кратко что я делаю:
Делаю виджет для AmoCRM(вдруг это важно), и постоянно общаюсь с скриптом на PHP, который возвращает мне необходимые данные. При очередном получении данных с скрипта, который в свою очередь получил эти данные через API AmoCRM, получил следующую картину:
9284eb4f296f48de996a9aefd19f9287.jpg
В этом как раз таки и проблема, вывод NaN.

Как я получал и передавал данные:
Вы могли заметить, что при часть данных проходит, а часть нет.
1. Номер документа, дата, генерируется скриптом.
2. ФИО в Р.П., ФИО в И.П., Реквизиты, Основание, Должность подставляются из массива данных полученных с Api AmoCRM. (Опытным путем заметил, если с Api приходит числовая строка, то данные в HTML выводятся без проблем)
3. Объекты, скрипт забирает эти данные из MySQL. MySQL база имеет кодировку UTF-8

Что я пытался делать:
1. Менять кодировки через: iconv; mb_convert_encoding; (ничего не изменилось)
2. Менять структуру данных: массив, объект;
3. Менять структуру вывода: toString(), и без;

Исходный код:
Массив который преобразуется в JSON и уходит к виджету в AmoCRM:
$values = array(
                'numberDocument' => $numDocument,
                'dayDate' => $day,
                'monthDate' => $month,
                'yearDate' => $year,
                'fioIP' => (string)$contactData['custom_fields'][$keys['fioIP']]['values'][0]['value'],
                'fioRP' => (string)$contactData['custom_fields'][$keys['fioRP']]['values'][0]['value'],
                'nameCompanyZakaz' => $contactData['name'],
                'osnov' => (string)$contactData['custom_fields'][$keys['osnov']]['values'][0]['value'],
                'requiz' => (string)$contactData['custom_fields'][$keys['requiz']]['values'][0]['value'],
                'post' => (string)$contactData['custom_fields'][$keys['post']]['values'][0]['value'],
                'objects' => $objects,
            );

$objects
$tempArray = array(
                   'addressObject' => $item['adress'],
                   'typeObject' => $item['type'],
                   'cadastralNumberObject' => $item['cadastral_number'],
                   'cadastralCostObject' => $cadastralCost,
                   'marketCostObject' => $item['market_value'],
             );
$objects[] = $tempArray;

Вывод на экран:
widget.crm_post(
    'http://site.com/generator.php?action=preview&document=1&id=' + AMOCRM.data.current_card.id + str,
    {},
    function (data) {
        htmlCode = '';
        obj2 = jQuery.parseJSON(data);
        console.log(obj2);
        obj2.forEach(function (item2, i, obj2) {
            console.log(item2);

...

            htmlCode = htmlCode + '<div class="widget_settings_block__item_field">' +
                '<div class="widget_settings_block__title_field" title="">ФИО в Р.П.: </div>' +
                '<div class="widget_settings_block__input_field">' +
                +item2.fioRP.toString() +
                '</div>' +
                '</div>';

...


Что выводит obj2[0].fioRP в Консоли Google Chrome.
9df353a02e31493f8ba1a9659da8779b.png

widget.crm_post, является оберткой(разработано в AmoCRM) к JQuery.Ajax.

Не пробовал через JQuery.Ajax, т.к хостинг на котором размещен "backend" скрипт виджета, не имеет SSL сертификата.

Я увы не знаю, куда уже копать и что делать, чтобы победить NaN.
Хотелось бы услышать мнение людей, как это победить.
  • Вопрос задан
  • 1118 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Ni55aN
@Ni55aN
+ лишний перед item2.fioRP.toString()

NaN означает то, что с нечисловыми данными пытались провести арифметическую операцию, и в данном случае первый плюс после троки как положено послужил для конкатенации, а второй "+" конвертирует значение переменной в число, но так как строка вроде "test" ничего общего не имеет с числом, то и не получилось его получить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы