写html5 遇到的ajax请求跨域问题,访问本地数据库问题
2016-08-19 13:30
411 查看
最近经理要求把app做成html5 版本的。我用的apicloud (没遇到什么特别难的问题)做好后给经理看,然后说不是他想要的效果,他想要的是不要打包成apk形式的html5项目(就是纯网页版的项目)。好吧大部分东西都白忙活了。
于是我就改吧,还好前面做的页面大部分还可以用。可是问题就在第一天就出现了,网络请求 ajax跨域问题(以前没做过网页版的项目),我是直接拿android用的接口,用$.ajax,请求网络。好吧,如你们所想,直接死亡。第一个接口是post请求,不管怎样弄,状态返回为0,改为$.post,还是不行,同样的错误。网上各种查资料,看博客,弄了一天终于明白了是ajax请求跨域问题。好吧地二天继续,在网上找了很多方法,本来不准备改服务器接口的东西,但是显然不行。要解决这个问题还真要服务端加东西,我用的其中一个方法就是在服务端加上了
Response.Headers.Add("Access-Control-Allow-Origin", "*");
Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET");
这两句后就ok了,客户端什么也不用改,该传的参数照样传。OK,post请求就这样解决了。
你认为这样就完了?怎么可能,还有get请求呢,出了一个坑还有一个坑等着你。get遇到了个什么情况呢,get遇到的是我这般传的headers消息头(参数有点多)服务端获取不到,特么的崩溃了。好吧,最后是在无赖了,加在请求路径后边吧。有可能有人会问我为什么不把接口都写成post请求呢,原因是我有个get请求是访问文件下载一个zip的数据库。
跨域问题解决了,前面说到了下载了一个数据库,下面的问题就围绕到下载的数据库。
前面说到了,我是下载的一个数据库的压缩包,在访问数据库之前要解压压缩包吧。好吧我就去网上查html访问文件系统,找了一个File
System API只支持Chrome浏览器,然后找到了一个 JSZip 和
JSZipUtils 库,开始没注意依样画葫芦都写好了。可是问题来了,访问不了我下载的数据库的文件,完全没反应,后来我在google上找到了一番翻译过来的官方文档,写了一句话,大概是这样:浏览器不能访问本地文件系统,file system api 是浏览器自身创建的一个沙盒,file system api 所有操作都在沙盒中进行。
我看明白后完全懵了,我又去问了另外一个经理,一个做了接近20年软件开发的大神(公司的什么技术性难题都是靠他解决),他给我明确回答,浏览器不能访问本地文件系统,除非安装插件。安装插件,怎么可能,不现实,不说客户问题,就安全性而言不可能,浏览器还有差异化。好吧这条路反正是断了。只有不下载解压包,下载完整的数据库来进行数据库操作吧
再来说说访问本地数据库,我在网上找到了一个web sql (已经弃用,chrome浏览器暂时还支持)和 indexdb。
先来说一说web sql,首先一句话,他也是坑。web sql 访问的地址是浏览器映射的缓存地址,我把自己下载的数据库放在要访问的文件夹中。他打开数据库的语句是:
var db = openDatabase('LocationInfo', '', '', 3 * 1024 * 1024);参数依次是“访问数据库名字,版本号,数据库描述语句,指定允许访问大小”。你以为这样就可以访问到数据库了吗,对的,访问不了。经过我和我旁边同事的研究,每次新建一个数据库,浏览器映射的缓存地址下就会产生一个序列号,发现必须要在database自带数据库中注册一个序列号,一个数据库对应一个序列号(1.2.3。。。)(后面我们们有去研究怎么代码实现注册序列号),然后映射的缓存地址文件夹里的数据库名字就是序列号,才能访问数据库,当然,访问数据库的时候数据库名字还是填你的数据库名字,而不是序列号。是不是很坑。好吧,说实话,我放弃了。
到这里,你们是不是会想到我提到的另一个数据库呢,他会不会好些呢。然而并不是这样,具体我研究的经过就不废话了,经过研究,发现indexdb是以对象存储的,而不是我们普遍的关系型数据库,这可就尴尬了。
小白一枚,有什么错的地方望指正。一点小小的经验,分享给你们
于是我就改吧,还好前面做的页面大部分还可以用。可是问题就在第一天就出现了,网络请求 ajax跨域问题(以前没做过网页版的项目),我是直接拿android用的接口,用$.ajax,请求网络。好吧,如你们所想,直接死亡。第一个接口是post请求,不管怎样弄,状态返回为0,改为$.post,还是不行,同样的错误。网上各种查资料,看博客,弄了一天终于明白了是ajax请求跨域问题。好吧地二天继续,在网上找了很多方法,本来不准备改服务器接口的东西,但是显然不行。要解决这个问题还真要服务端加东西,我用的其中一个方法就是在服务端加上了
Response.Headers.Add("Access-Control-Allow-Origin", "*");
Response.Headers.Add("Access-Control-Allow-Methods", "POST,GET");
这两句后就ok了,客户端什么也不用改,该传的参数照样传。OK,post请求就这样解决了。
你认为这样就完了?怎么可能,还有get请求呢,出了一个坑还有一个坑等着你。get遇到了个什么情况呢,get遇到的是我这般传的headers消息头(参数有点多)服务端获取不到,特么的崩溃了。好吧,最后是在无赖了,加在请求路径后边吧。有可能有人会问我为什么不把接口都写成post请求呢,原因是我有个get请求是访问文件下载一个zip的数据库。
跨域问题解决了,前面说到了下载了一个数据库,下面的问题就围绕到下载的数据库。
前面说到了,我是下载的一个数据库的压缩包,在访问数据库之前要解压压缩包吧。好吧我就去网上查html访问文件系统,找了一个File
System API只支持Chrome浏览器,然后找到了一个 JSZip 和
JSZipUtils 库,开始没注意依样画葫芦都写好了。可是问题来了,访问不了我下载的数据库的文件,完全没反应,后来我在google上找到了一番翻译过来的官方文档,写了一句话,大概是这样:浏览器不能访问本地文件系统,file system api 是浏览器自身创建的一个沙盒,file system api 所有操作都在沙盒中进行。
我看明白后完全懵了,我又去问了另外一个经理,一个做了接近20年软件开发的大神(公司的什么技术性难题都是靠他解决),他给我明确回答,浏览器不能访问本地文件系统,除非安装插件。安装插件,怎么可能,不现实,不说客户问题,就安全性而言不可能,浏览器还有差异化。好吧这条路反正是断了。只有不下载解压包,下载完整的数据库来进行数据库操作吧
再来说说访问本地数据库,我在网上找到了一个web sql (已经弃用,chrome浏览器暂时还支持)和 indexdb。
先来说一说web sql,首先一句话,他也是坑。web sql 访问的地址是浏览器映射的缓存地址,我把自己下载的数据库放在要访问的文件夹中。他打开数据库的语句是:
var db = openDatabase('LocationInfo', '', '', 3 * 1024 * 1024);参数依次是“访问数据库名字,版本号,数据库描述语句,指定允许访问大小”。你以为这样就可以访问到数据库了吗,对的,访问不了。经过我和我旁边同事的研究,每次新建一个数据库,浏览器映射的缓存地址下就会产生一个序列号,发现必须要在database自带数据库中注册一个序列号,一个数据库对应一个序列号(1.2.3。。。)(后面我们们有去研究怎么代码实现注册序列号),然后映射的缓存地址文件夹里的数据库名字就是序列号,才能访问数据库,当然,访问数据库的时候数据库名字还是填你的数据库名字,而不是序列号。是不是很坑。好吧,说实话,我放弃了。
到这里,你们是不是会想到我提到的另一个数据库呢,他会不会好些呢。然而并不是这样,具体我研究的经过就不废话了,经过研究,发现indexdb是以对象存储的,而不是我们普遍的关系型数据库,这可就尴尬了。
小白一枚,有什么错的地方望指正。一点小小的经验,分享给你们
相关文章推荐
- 用反向代理nginx proxy_pass配置解决ie8 ajax请求被拦截问题 ie8用nginx代理实现跨域请求访问 nginx405正向代理request_uri
- js 读取本地文件遇到ajax跨域问题
- ajax请求中遇到的跨域问题的解决办法(jsonp)
- Ajax访问Servlet的跨域请求问题—Access-Control-Allow-Origin
- 解决ajax不能访问本地文件问题(利用js跨域原理)
- Web Service (014---webservice使用Jquery、Ajax请求WebService所遇到的跨域问题)
- win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面
- 遇到了访问IIS元数据库失败的问题,亲身经历
- 关于AJAX访问数据库不能及时获得更新数据的问题
- 闭关纪要2.不同子域名之间Ajax访问跨域问题的解决
- jQuery 跨域请求问题和xml文件中带有命名空间的元素的访问
- WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 - Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。
- 用JQuery发送Ajax请求是提示:拒绝访问 --Ajax跨域请求
- 前端使用Jquery的getJSON方法,后台使用PHP,解决IE和火狐Firefox中存在的跨域ajax请求问题。
- 解决ASP.NET AJAX在frame及iframe中跨域访问的问题
- Ajax请求缓存问题、中文乱码问题、跨域问题
- HTML5:使用postMessage实现Ajax跨域请求
- 初学.net遇到的问题:数据库访问连接问题
- 蛙蛙请教:关于ajax,xmlhttp跨域请求和HTC组件的CSS继承问题
- 初学.net遇到的问题:数据库访问连接问题