javascript SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Текст ошибки

SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

Сохраняем данные формы, чтобы передать их с помощью ajax.
Ошибка появляется при попытке передать из формы float.

$('.create_sale_payment_notification').click(function (e) {
        e.preventDefault();
        e.stopPropagation();

        let formData = new FormData();

        formData.set('payment_date', $('.payment_date').val());
        // вот в этой строке ошибка
        formData.set('sum', $('.payment_sum').val());
        formData.set('number', $('.order_number').val());

        $.ajax({
            url: /url,
            type: 'POST',
            data: formData,
            async: true,
            success: function () {
                // ...
            },
            error: function (message) {
               // ...
            },
            cache: false,
            contentType: false,
            processData: false
        });
    });

Решение

  1. В json не упаковывается float. Совсем.
    Выход - переводить float в string или integer. В моём случае выберем integer, т.к. число - денежная сумма и всё равно нам нужно будет её перевести в копейки. Если знаков после запятой больше двух, их округляем с помощью. Math.floor().
    formData.set('sum', Math.floor($('.payment_sum').val() * 100));
  2. Также получим ошибку, пытаясь умножить $('.payment_sum').val() * 100, если пользователь использует в качестве разделителя запятую. Необходимо заменить её на точку:
    formData.set('sum', $('.payment_sum').val().replace(",", ".") * 100);

Источники

  • https://github.com/nlohmann/json/issues/98
  • http://qaru.site/questions/1137299/nan-in-multiplication
  • http://qaru.site/questions/16474113/parse-float-with-decimals-to-json-in-javascript-also-for-1-as-100
  • https://habr.com/ru/post/312880/#s2