JQuery отправляет NaN вместо целого числа в запросе Ajax - PullRequest
0 голосов
/ 06 июня 2018

Я разрабатываю небольшой бэкэнд-сервис / приложение с помощью Spring Boot и некоторого jQuery / AJAX.

Недавно при тестировании функциональности администратора я столкнулся со странной проблемой, связанной с кодом, приведенным ниже:

function updateUserRow(id) {
  $.get(ajaxUrl + id, function (data) {
      $('.userPlaceBtns').empty();
      $('.userArticleBtns').empty();
      $.each(data, function (key, value) {
          form.find("textarea[name='" + key + "']").val(value);
          form.find("input[name='" + key + "']").val(value);
          form.find('input:checkbox').prop(value ? 'checked' : '');
          if(key == 'placeIds' && value.length != 0){
              for(i = 0; i < value.length; i++) {
                     $('<button/>', {
                        text:  value[i],
                        id: 'btn_place_'+i,
                        click: function () { 
                            inspectOwnedPlace(value[i]); 
                        }
                    }).appendTo('.userPlaceBtns');
                  }
          }
          if(key == 'articleIds' && value.length != 0){
              for(i = 0; i < value.length; i++) {
                     $('<button/>', {
                        text:  value[i],
                        id: 'btn_article_'+i,
                        click: function () { 
                            inspectOwnedArticle(value[i]);
                        }
                    }).appendTo('.userArticleBtns');
                  }
          }
      });
      $('.load-bar').hide();
      $('#userEditRow').modal();
  });
}

Так что, помимо заполнения данных модальных форм, эта функция помогает мне перебирать пользовательские данныеи поместите кнопку на подготовленные div с для каждого из этих данных.

Странные вещи случаются, когда я пытаюсь проверить связанные с пользователем места или статьи с $.get с сервера:

function inspectOwnedPlace(id){
    console.log(id);
    var intId = parseInt(id);
    console.log(placesAjaxUrl + intId);
    $.get(placesAjaxUrl + intId, function (data) {
          var placeForm = $(".ownedPlaceForm");
          $.each(data, function (key, value) {
              placeForm.find("textarea[name='" + key + "']").val(value);
              placeForm.find("input[name='" + key + "']").val(value);
          });
          $('#inspectOwnedPlaceModal').modal();
      });
}

Проблема

По некоторым причинам, в 50-70% случаях я получаю NumberFormatException на стороне сервера из-за NaN, поступающего с запросом сервера.Но в НЕКОТОРЫХ случаях это определенно работает, как и ожидалось!

Важно то, что: текст на сгенерированных кнопках ВСЕГДА отображается так, как ожидалось, поэтому я могу сделать вывод, что сервер всегда выдает релевантные неиспорченные данные спереди и что-то в коде JS ведетк частым NaN исключениям, когда я пытаюсь запросить релевантные пользователю данные по id в качестве следующего шага.

Вот скриншот случая, когда я сталкиваюсь с этой проблемой (вкладка браузера с консолью разработчика) для лучшего понимания:

enter image description here

Итак, здесь я получаю NumberFormatException сервера из-за NaN вместо целого числа.

ЧтоЯ попытался:

  • обрабатывать идентификаторы, так как они по умолчанию не используются как функция usig parseInt();
  • обрабатывать идентификаторы как строки и анализировать их как текст.

Мне просто интересно, что может привести к непредсказуемым, несистемным NaN s, которые, скорее всего, являются "испорченными целыми числами" в контексте моего текущего кода.Заранее спасибо!

...