1

我对 Ajax 很陌生,我正在尝试在 jsp 页面上显示已完成的任务和正在进行的任务。以下是我的ajax请求:

function checkProgress() {
  var uri="<%=request.getContextPath()%>/digitalObject/checkingProgress";
  $.ajax(
    {
      url: uri,
      type: 'GET',
      dataType: 'json',
      async:false,
      timeout: 100,
      success: function(data){
         updateUI(data);
      },
      error: function(xhr, ajaxOptions, thrownError) {
        alert("err"+thrownError+xhr.responseText);
      }
    });
}
function updateUI(data){
  // do something with "data"
  switch(data) {
    case "progress.Decompose":
      $("#decompose").removeClass("notStarted");
      $("#decompose").addClass("progress");
      $("#imgDecompose").html(htmlLoaderImage);
      break;
    case "Main object is decomposed":
      $("#decompose").removeClass("progress");
      $("#decompose").addClass("finished");
      $("#imgDecompose").html(htmlSuccessImage);
      break;
    case "started":
      alert(data);
  }
  checkProgress (uri);
}

这是一个无限的 Ajax 请求,它将通过在控制器中调用此方法来检查进度。

@RequestMapping(value="/checkingProgress",method= RequestMethod.GET)
public String checkProgress() {
  System.out.println("In checking progress");
  return progress;
}

但我收到一个未定义的错误。我正在使用 Spring MVC。我不明白为什么会这样。

4

3 回答 3

1

如果您的浏览器向 /checkingProgress 发送有效请求,首先使用例如 firebug 进行检查

那么既然你datatypeJSON你可能想要返回一个有效的JSON.

于 2012-08-27T13:32:24.663 回答
1

我可以建议一个更好的方法..

var updater = setInterval(function(){
   $.ajax(
   {
     url: uri,
     type: 'GET',
     dataType: 'json',
     async:false,      
     success: updateUI
   });
}, 5000), 

function updateUI(data){
   //switch - case and update accrodingly
}

让回调完成执行比在回调中进行另一个调用更有意义success

setInterval每隔一段时间执行你的代码块。允许执行其他功能。并且还保持调用堆栈干净!

于 2012-08-27T13:39:44.157 回答
1

我认为您没有将请求发送到正确的路径。从您发布的控制器代码片段看来,您需要将请求映射更改为@RequestMapping(value="/digitalObject/checkingProgress").

此外,正如@Michael Laffargue 指出的,您需要返回有效的 json。您可以通过在方法声明中添加 @ResponseBody 来做到这一点:

public @ResponseBody String checkProgress() {
    ...
}

确保 MappingJacksonHttpMessageConverter 已启用。您还可以使用 Firebug、Chrome 开发工具或 Fiddler 来准确查看您的请求/响应发生了什么。

于 2012-08-27T14:13:13.410 回答