0

我有一个 Spring Web 应用程序,我在其中使用 Web 服务加载 UI 数据。我使用的数据库是 H2,我发布了一个示例服务,我使用它填充一个select元素。下面是春季服务。

@RequestMapping(value = "/getAllOutlets", method = RequestMethod.GET)
public @ResponseBody ModelMap loadOutlets(){
    List<Outlet> outlets = dataViewService.getAllOutlets();

    ModelMap model = new ModelMap();
    model.put("outlets", outlets);
    return model;
}

此服务由以下 get 调用使用。

function getOutlets(){
var element = $('#outlets select');
element.empty();

$.get('/getAllOutlets',function(response){
    for(var i = 0; i < response.outlets.length; i++ ){
        element.append("<option id="+ response.outlets[i].outletId + " >" + response.outlets[i].name + "</option>" );
    }
});
}

当我运行 Web 应用程序时,数据被加载到 UI 中,没有任何挂起。但是当我刷新页面时,数据不会加载到 UI 中。我检查了萤火虫,我可以看到所有的调用前面都有加载图标。(没有添加断点)。我注意到的另一件事是,只有需要数据库访问的服务在第二次调用中被挂起。例如,我有一个读取系统属性文件并发送值的服务。当所有其他数据库所需的服务都被挂起时,它不会被挂起。下面是萤火虫中调用的屏幕截图。( 希望你能理解 )

在此处输入图像描述

更新 :

function populateUIMajorGroups(){
var uiElement = $('.item-group-button').first();

$.get('/getAllMajorGroups', function(data){
    if(data.majorGroups.length != 0){
      $('.panel_list').empty();
      uiElement.empty();
    }

    for(var i = 0; i < data.majorGroups.length; i++){
      var clone = uiElement.clone();
      clone.append("<h3>" + data.majorGroups[i].description + "</h3>");
      clone.attr("id", data.majorGroups[i].majorGroupId);
      $('.panel_list').append(clone);
    }

},'json');
}

上面的代码运行完美,没有任何挂起!如您在屏幕截图中所见!为什么这只发生在 GET 方法上?

4

1 回答 1

0

我认为你是json从你的server,但你没有使用它,添加你喜欢third parameter json的:datatypeget function

$.ajax({url:'/getAllOutlets',dataType:'json',type:'GET',
    success:function(response){
      if(response.outlets && response.outlets.length)//check here that it is a json
      {
          for(var i = 0; i < response.outlets.length; i++ ){
              element.append("<option id="+ response.outlets[i].outletId + " >" + response.outlets[i].name + "</option>" );
          }
      }
    }//End success
});

文档http://api.jquery.com/jQuery.ajax/

于 2013-05-06T04:52:07.237 回答