带有JSON的Spring MVC无法通过ajax调用工作

时间:2013-07-20 17:54:58

标签: json spring jquery spring-mvc

我正在尝试建立一个非常简单的“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时 - 它有效。

http://ip.jsontest.com/

<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;
    }   
}

}

1 个答案:

答案 0 :(得分:0)

好吧,经过多个小时的试验和错误后,我发现需要将以下标题添加到Response

Access-Control-Allow-Origin : *

我创建了一个扩展OncePerRequestFilter的Filter类,它将上述标题添加到所有响应中。

这解决了我的问题。