下载了B-JUI前端框架想学习一下,结果解压后直接双击打开index.html文件,提示一个JSON(menu-form.json)未加载成功,左侧目录树出不来,搜索了一下仿佛是跨域问题
网上说即便是同一个网站的内容,用AJAX请求JSON的时候也是跨域,感觉真是坑
但是捣鼓了半天也没解决。把解压后的整个文件夹放到本地测试环境中的网站目录里,访问的时候也同样提示405 NOT ALLOWED
又是一顿搜索,一会儿觉得是跨域,但是配置NGINX跨域的教程真的跟看天书一样,感觉自己真的是老了。。。
后来发现,在chrome调试界面把对于这个JSON的请求方式由POST强制改为GET就OK。然后又是一顿搜索,发现NGINX果然默认是不支持POST访问静态资源的。于是按照教程,在NGINX配置文件中加入:
error_page 405 =200 @405;
location @405 {
root 网站根目录路径;
proxy_method GET;
proxy_pass 网站域名;
}
重启NGINX:sudo nginx -s reload
问题解决!
小结一下知识点:
1.跨域问题是浏览器造成的,不同浏览器的跨域策略不同,有的严格,例如chrome,有的不是那么严,例如edge和ff,主要还是考虑安全问题。
2.用AJAX请求静态资源推荐用GET,而不是POST,至于为什么B-JUI要设置POST请求一个JSON,我猜测可能是因为网站后台管理目录有时候需要针对不同的权限进行微调,例如网站管理员可以对网站全局进行配置,而一般编辑就不行,所以可以考虑用一个php来根据用户登陆的权限来动态生成JSON,但是在哪里把请求地址由原来的menu-form.json改为动态的php文件还要研究一下。
3.nginx默认是不支持用POST方法请求静态文件的,这点貌似跟Apache不同,需要进行如上的手动配置。ubuntu系统nginx的配置文件在/etc/nginx/目录中,ls一下文件名都很好理解。
就这么多把,接下来就要开始学习b-jui框架了,要学的东西真多。。。感觉快学不过来了
网友评论