Использование jQuery / JSON для обновления списка выбора — выполнение кода jQuery, похоже, останавливается

#jquery #ajax #json

#jquery #ajax #json

Вопрос:

У меня есть следующий код jQuery в попытке заполнить выпадающий список:

 <script language="javascript" type="text/javascript">
$(function(){
    $("#setStatusDrpDown").change(function(){
    $.getJSON("getStatusChangeReasons", 
              {selectedStatusId: $(this).val(), ajax: 'true'}, 
               function(result) {
              alert("here");
              for (var i = 0; i < result.length; i  ) {
              alert("hello");
              options  = '<option value="'   result[i].id   '">'   result[i].changeReason   '</option>';
  }
              $("select#statusChangeReason").html(options);
        });
      });
    });
</script>
  

Я знаю, что код запущен, потому что я вижу, как мой контроллер перехватывает его и даже печатает значение selectedStatusId . Чего я не могу понять, так это почему ни одно из моих предупреждений не отображается. Я не вижу никаких ошибок в консоли javascript. Как будто код просто завершает выполнение после контроллера. Приветствуются любые советы!

Ответ №1:

Возможно, ваша служба выдает ошибку или возвращает что-то, что $.getJSON не может понять.

Важно: начиная с версии jQuery 1.4, если файл JSON содержит синтаксическую ошибку, запрос обычно завершается без сбоев. По этой причине избегайте частого ручного редактирования данных JSON. JSON — это формат обмена данными с более строгими правилами синтаксиса, чем у объектной литеральной нотации JavaScript. Например, все строки, представленные в JSON, будь то свойства или значения, должны быть заключены в двойные кавычки. Подробнее о формате JSON см. http://json.org /.

http://api.jquery.com/jQuery.getJSON/

Вы можете обработать ошибку с помощью возвращаемого значения xhr.

 // Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });
  

Комментарии:

1. Вы правы, это действительно предупреждение об ошибке. Я возвращаю хэш-набор объектов, и каждый объект имеет . Метод toString переопределен, чтобы его можно было рассматривать как JSON, но, видимо, я все еще делаю что-то не так.

2. Должен ли я возвращать ArrayList или HashSet как объект JSON?

3. Этот ответ привел меня к успеху. Сейчас моя проблема заключается в какой-то циклической ссылке при попытке импортировать библиотеку jackson, но это совершенно новый вопрос.