我正在尝试建立一个非常简单的“HelloWorld”Spring MVC,它将使用JSON响应用户请求。
我创建了这个maven项目http://www.filedropper.com/mvctest(7 kb)。 要运行它,只需使用mvn jetty:run
启动时,http://localhost:8080/
会以
{"name":"John","age":25}
这正是我想要的。现在,我没有在浏览器中键入http://localhost:8080/
,而是通过ajax调用它。
我创建了这个简单的html文件:
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"> </script>
<script>
$(document).ready(function(){
$.ajax({
url:"http://localhost:8080",
success: function(data) { alert("succsess") },
error: function() { alert("error") }
});
});
</script>
</head>
</html>
结果是“错误”。我可以在服务器日志上看到控制器被调用。我可以在firebug中看到JSON的正确响应,但由于某种原因,JQuery无法解析它。
当我尝试调用返回JSon的不同URL时 - 它有效。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"> </script>
<script>
$(document).ready(function(){
$.ajax({
url:"http://ip.jsontest.com/",
success: function(data) { alert("succsess") },
error: function() { alert("error") }
});
});
</script>
</head>
</html>
结果是成功!我可以在firebug中看到服务器响应中的一些额外标题,但我不认为这是一个问题,其他一切都与我的项目相同。
任何想法为什么http://ip.jsontest.com/响应可以被JQuery正确解释而不是我的?
谢谢, 亚历
P.S。:这是控制器处理请求的来源
@Controller 公共课HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public @ResponseBody Person home(Model model) {
logger.info("Welcome home!");
Person person = new Person("John", 25);
return person;
}
public class Person{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
答案 0 :(得分:0)
好吧,经过多个小时的试验和错误后,我发现需要将以下标题添加到Response
Access-Control-Allow-Origin : *
我创建了一个扩展OncePerRequestFilter的Filter类,它将上述标题添加到所有响应中。
这解决了我的问题。