无法使用jquery填充选择框

时间:2017-05-25 10:52:08

标签: javascript jquery rest

我有一个由jQuery填充的选择框。这些选项是通过REST调用从服务器获取的,然后用于填充选择框。

应用程序也应该脱机工作,但离线时这些REST调用失败。所以我正在做的是当REST调用实际通过时,我将这些值存储在localStorage内,当离线并且REST调用失败时,我只是在localStorage中获取存储的值并尝试填充选择框。

但是选择框仍然显示为空。我在控制台中打印了存储的值,并显示实际成功存储和检索的这些值。我不确定为什么我的选择框仍然显示为空。

$.getJSON("/openmrs/ws/rest/v1/location", function(result) {
  var locations = $("#identifierLocations");

  localStorage.setItem("locations", result.results);

  $.each(result.results, function() {
    locations.append($("<option />").val(this.uuid).text(this.display));
  });
}).fail(function(jqXHR, textStatus, errorThrown) {
  var data = localStorage.getItem("locations");

  if (data) {
    var locations = $("#identifierLocations");

    for (var i = 0; i < data.length; i++) {
      locations.append($("<option />").val(data[i].uuid).text(data[i].display));
    }
  }
});

我在console.log中使用了.fail(),我可以确认数据实际上已经存储了所有位置对象,但为什么我的选择框仍然显示为空。

1 个答案:

答案 0 :(得分:2)

问题是因为localStorage只能保存字符串。您需要在存储它们之前序列化result.results,然后在检索它们时进行反序列化。试试这个:

$.getJSON("/openmrs/ws/rest/v1/location", function(result) {
  localStorage.setItem("locations", JSON.stringify(result.results));
  populateLocations(result.results);
}).fail(function(jqXHR, textStatus, errorThrown) {
  var data = localStorage.getItem("locations");
  if (data) {
    populateLocations(JSON.parse(data));
  }
});

function populateLocations(locations) {
  var html = locations.map(function(o) {
    return '<option value="' + o.uuid + '">' + o.display + '</option>';
  }).join('');
  $("#identifierLocations").html(html);
}