我在我的示例应用程序中使用了backbonejs。以前,我在nodejs上托管这个,但现在想在tomcat上运行它,但是这个更改在客户端浏览器上给了我一个错误。我搜索并发现要解决此问题,必须将crossdomain(https://stackoverflow.com/a/33820700/5086633)设置为true。不知道我应该怎样和应该处理这个问题。在这方面的任何帮助都非常感谢。
XMLHttpRequest cannot load http://localhost:8080/backbonejs/testpost.
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'null' is therefore not allowed access. The response
had HTTP status code 403.
使用ajaxPrefilter,模型和集合,如下所示。
$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
options.url = 'http://localhost:8080/backbonejs' + options.url;
});
var Banks = Backbone.Collection.extend({
url: '/testpost'
});
var Bank = Backbone.Model.extend({
urlRoot: '/testpost'
});
答案 0 :(得分:2)
在express.js中:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
在本机NodeJS服务器中:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
答案 1 :(得分:1)
我在Web.xml中添加了这个功能。
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
答案 2 :(得分:1)
也可以用这个来实现...... 这篇文章很方便How to setup Access-Control-Allow-Origin filter problematically in Spring Security 3.2 无需在tomcat服务器中执行此操作。另外,我没有在这里使用AddFilterBefore。下面的代码足以解决问题。
rootContext.setServletContext(container);
FilterRegistration.Dynamic corsFilter =
container.addFilter("corsFilter", CORSFilter.class);
corsFilter.addMappingForUrlPatterns(null, false, "/*");