Java Ajax调用中的未定义错误
我对Ajax非常陌生,我试图在jsp页面上显示已完成的任务和正在进行的任务。以下是我的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
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() {
...
}