Java Ajax调用中的未定义错误

Java Ajax调用中的未定义错误,java,javascript,ajax,jsp,spring-mvc,Java,Javascript,Ajax,Jsp,Spring Mvc,我对Ajax非常陌生,我试图在jsp页面上显示已完成的任务和正在进行的任务。以下是我的ajax请求: function checkProgress() { var uri="<%=request.getContextPath()%>/digitalObject/checkingProgress"; $.ajax( { url: uri, type: 'GET', dataType: 'json', async:false

我对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);
}

但是我得到了一个未定义的错误。我正在使用SpringMVC。我不明白为什么会发生这种情况。

首先使用例如firebug检查您的浏览器是否向/checkingProgress发送了有效的请求


既然您的
数据类型是
JSON
,那么您可能需要返回一个有效的
JSON

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

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
每隔一段时间执行一段代码。允许执行其他功能。而且还保持了调用堆栈的干净

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

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

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

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

什么是
未定义的
?你的错误控制台里还有什么吗?@RobinMaben,太深了,伙计。@jbabey:我是想问到底是什么错误。是否是未定义的符号。错误案例中的警报框显示未定义。挑剔:进行同步调用时,超时不可能为100。如果您在循环中调用它,您只是锁定了浏览器,这是一种糟糕的做法。感谢您的回复。调用该方法是因为在控制台上它正在打印“正在检查进度”。谢谢。我自己解决了它,问题正是您所说的…:)
public @ResponseBody String checkProgress() {
    ...
}