这里有一些背景信息...
- 1) http://www.html5rocks.com/en/tutorials/cors/ - 请注意,您需要阅读有关“不那么简单的请求”的内容,因为 JSON 属于此类。
- 2)http://stackoverflow.com/questions/9613210/cors-access-control-allow-origin-despite-correct-headers?rq=1
- 3) http://caniuse.com/#search=cors - 详细介绍支持 CORS 的浏览器
- 4)http://stackoverflow.com/questions/10748537/access-control-allow-origin-on-playframework(玩1不玩2)
所以这是我实现的:
由于不是那么简单的请求(参见上面的 1)进行飞行前调用,您需要将以下内容添加到路由文件中:
POST /url_to_json_webservice controllers.myJsonWebServices.myJsonWebService
OPTIONS /url_to_json_webservice controllers.myJsonWebServices.checkPreFlight
然后在您的控制器中设置以下方法:
public static Result checkPreFlight() {
response().setHeader("Access-Control-Allow-Origin", "*"); // Need to add the correct domain in here!!
response().setHeader("Access-Control-Allow-Methods", "POST"); // Only allow POST
response().setHeader("Access-Control-Max-Age", "300"); // Cache response for 5 minutes
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); // Ensure this header is also allowed!
return ok();
}
注意我可能在这里设置了比需要更多的标题,所以请检查你需要哪些!
还要记住将以下内容添加到返回实际 JSON 结果的控制器方法的末尾(如我上面的问题):
public static Result myJsonWebService() {
...
response().setHeader("Access-Control-Allow-Origin", "*");
return ok(toJson(jsonObject));
}